2010-01-15 58 views
1

我现在有这些模型:Django的ManyToManyField创建故障

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)

回答

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