2010-01-15 6 views
1

я в настоящее время эти модели:Джанго 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() 

Я в конечном итоге с вновь созданным пустым элементом.

Я также не понимаю, как выполнить запрос, чтобы получить все теги для определенного элемента? Нет класса Tag, потому что мне не нужно указывать атрибут through на ManyToManyField, так как нет никаких дополнительных данных, поэтому я не могу использовать диспетчер тегов, чтобы сделать что-то вроде 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() 
Смежные вопросы