2011-11-11 53 views
36
for item in data: 
    category_id = item['category_id'] 
    del item['category_id'] 

    category = Category.objects.get(pk=category_id) 

    code = item['code'] 

    try: 
     article = Article.objects.get(pk=code) 
    except: 
     article = Article(**item) 
     article.save() 

    # at this point I have the article & category, but the next 
    # statement throws me an error: 
    category.articles.add(article) 
    category.save() 

的错误是:AttributeError:'ManyRelatedManager'对象没有属性'add'?我喜欢在Django的网站,但得到这个错误

AttributeError: 'ManyRelatedManager' object has no attribute 'add' 
+20

您是否在使用直通模式?如果是这样.add和.create将不起作用。 – JamesO

回答

60

JamesO是正确的 - 它看起来像你的Category.articles领域有过关系。假设你的模型至少类似以下

class Article(models.Model): 
    name = models.CharField(max_length=128) 

class Category(models.Model): 
    name = models.CharField(max_length=128) 
    articles = models.ManyToManyField(Article, through='Membership') 

class Membership(models.Model): 
    article = models.ForeignKey(Article) 
    category = models.ForeignKey(Category) 
    author = models.CharField() 

然后到Article添加到Category必须

m = Membership(article=article, category=category, author="Dan TM") 
m.save() 

注意 - 我们不能告诉什么through场被调用,所以Membership是一个猜测,灵感来自于django docs

+1

它应该继续工作,如果通过不添加任何东西... – Natim

相关问题