2011-11-11 61 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

相關問題