【问题标题】:Django ManyToManyField Creation ProblemsDjango ManyToManyField 创建问题
【发布时间】:2010-01-15 21:26:27
【问题描述】:

我目前有以下型号:

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) 的操作

【问题讨论】:

    标签: python django django-models many-to-many


    【解决方案1】:

    看看一些例子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()
    

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 2021-10-18
      相关资源
      最近更新 更多