관련 필드 유형을 새로 작성하고 싶습니다. 다음은 간단한 예제이다 c = Collection()
를여러 값을 반환하는 Django "ForeignKey"빌드
class CustomQuerySet(QuerySet):
def current(self):
return self.filter(invalid_date__isnull=True)
class CustomManager(Manager):
def get_query_set(self):
return CustomQuerySet(self.model, using=self._db)
def current(self):
return self.get_query_set().current()
class Item(models.Model):
objects = CustomManager()
row_id = models.IntegerField(primary_key=True)
id = models.IntegerField()
name = models.CharField(max_length=100)
change_date = models.DateTimeField(auto_now_add=True)
invalid_date = models.DateTimeField(null=True, blank=True)
class Collection(models.Model):
item = MultipleRelatedField(Item, related_field='id', related_name='collections')
name = models.CharField(max_length=100)
을 감안할 때 :
c.item
이Item.objects.filter(id=c.item_id)
에의 검색어 동등한를 반환해야합니다.- 해당 쿼리 세트는 CustomQuerySet 인스턴스 여야합니다.
Item.objects.filter(collections__name='SomeName')
은 예상대로 작동해야합니다.- 작업
Collection.objects.filter(item__name='OtherName', item__invalid_date__isnull=True)
이 예상대로 작동해야합니다.
이 내용은 ManyToManyField
으로 구현 될 수 있지만 수동으로 항목 개체를 c.item에 추가/제거하고 싶지는 않습니다. c.item은 항상 단일 id 값을 사용하므로 조인 테이블이 필요하지 않습니다. Collection의 기본 키가 아닙니다. c.item
은 다른 id 값을 가진 항목 객체를 포함 할 수도 있고 포함하지 않을 수도 있습니다.
나는 django.db.models.fields.related.ForeignRelatedObjectsDescriptor
및/또는 django.db.models.fields.related.ForeignObject
(또는 아마도 ManyToMany 해당 항목)을 서브 클래 싱해야 할 필요가 있음을 알고 있습니다.
각 항목은 하나의 컬렉션에 속합니까? 그렇다면'Item' 객체에'Collection'을 가리키는'ForeignKey'가 필요할 것입니다. 'RelatedManager'를 사용하여 역 관계가 제공하는 쿼리 세트를 사용자 정의 할 수 있습니다. –
좋은 질문입니다. 이름이 고안 되었기 때문에'Collection'과 같은 여러 클래스가있을 수 있으며'Item'을 수정하여 각각에 대해 'ForeignKey'를 추가하는 것은 허용되지 않습니다. 'MultipleRelatedField'는 여러 값을 반환하는'ForeignKey' 함수처럼 작동합니다. 그래서 하나 이상의'Collection'이 동일한'id' 값을 참조 할 수 있습니다. –