我有这些模型
class Collection(models.Model):
items = models.ManyToManyField('Item', through='CollectionItem', related_name='collection_items')
...
class Item(models.Model):
...
class CollectionItem(models.Model):
collection = models.ForeignKey(Collection)
item = models.ForeignKey(Item)
extra_stuff = models.CharField(max_length=100)
我是否以错误的方式思考这个问题,或者我应该能够使用
访问与集合相关的“通过”对象collection = get_object_or_404(Collection, pk=1)
collection.collectionitem_set.all()
因为我刚收到一个属性错误?
但是我可以通过related_name
访问它们collection = get_object_or_404(Collection, pk=1)
collection.collection_items.all()
我错过了一些非常明显的东西吗?为什么不使用'collectionitem_set'工作?
修改
刚刚注意到一个重要的遗漏,这就是collection.collection_items.all()的工作原理。我在CollectionItem上设置了相同的related_name
class CollectionItem(models.Model):
collection = models.ForeignKey(Collection, related_name='collection_items')
item = models.ForeignKey(Item)
extra_stuff = models.CharField(max_length=100)
一旦我删除了它,两种方式都无效。
答案 0 :(得分:1)
我无法重复。使用您的模型以及其他name
字段:
>>> from models import Collection, Item, CollectionItem
>>> c = Collection.objects.create(name='coll1')
>>> c.collectionitem_set.all()
[]