我想建立一个新的相关字段类型。这是一个简单的例子:
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 = Collection()
:
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)
应按预期工作。
我意识到这可以用 a 来实现,ManyToManyField
但我不想手动将项目对象添加/删除到 c.item。我不需要连接表,因为 c.item 总是使用单个 id 值,它不是 Collection 上的主键。并且c.item
可能/不/包含具有不同 id 值的项目对象。
我知道这可能需要子类化django.db.models.fields.related.ForeignRelatedObjectsDescriptor
和/或django.db.models.fields.related.ForeignObject
(或可能是 ManyToMany 等价物)。