我目前有这些型号:
class Category(models.Model):
name = models.CharField(max_length=200)
parent = models.ForeignKey('self', blank=True, null=True, related_name='child')
description = models.TextField(blank=True,null=True)
class Item(models.Model):
name = models.CharField(max_length=500)
...
tag = models.ManyToManyField(Category, null=True, blank=True, related_name='tag_item')
我的问题是,我无法将标签添加到我已经创建的任何项目中。如果我尝试做类似的事情:
>>> cat = Category.objects.get(pk=1)
>>> cat.tag_item.create(item_id = 1)
我得到TypeError: 'item_id' is an invalid keyword argument for this function
但是,如果我这样做:
>>> cat.tag_item.create()
我最终得到了一个新创建的空项目。
我也不明白如何执行查询以获取特定项目的所有标记?没有Tag类,因为我没有在ManyToManyField上指定through
属性,因为没有额外的数据,所以我不能使用Tag管理器来执行Tag.objects.filter(item_id=3)
答案 0 :(得分:4)
查看一些示例here。
基本上,你应该这样做:
class Item(models.Model):
name = models.CharField(max_length=500)
...
tags = models.ManyToManyField(Category, blank=True)
要创建项目,标记并关联它们,请执行以下操作:
item = Item(name='test')
item.save()
tag = Category(name='foo')
item.tags.add(tag)
并查询所有标签:
item.tags.all()