Django ManyToManyField 创建问题

1 投票
1 回答
1251 浏览
提问于 2025-04-15 18:04

我现在有这些模型:

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()

我最终会得到一个新创建的空项目。

我也不明白如何查询特定项目的所有标签?因为没有标签类,所以我不需要在ManyToManyField上指定through属性,因为没有额外的数据,所以我不能使用标签管理器来做类似Tag.objects.filter(item_id=3)的事情。

1 个回答

4

你可以在这里看看一些例子。

基本上,你应该这样做:

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()

撰写回答