2011-11-11 13 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() 

hatadır:AttributeError: 'ManyRelatedManager' nesnesinin 'add' özelliği yok mu? Django web sitesinde sevmiyorum ama bu hata var

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

Bir geçiş modeli mi kullanıyorsunuz? eğer öyleyse .add ve .create işe yaramaz. – JamesO

cevap

60

Jameso doğrudur - bir ilişki aracılığıyla vardır senin Category.articles alanına benziyor. böylece biz through alan ne denir söyleyemem - o zaman

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

Not gereken bir Category bir Article eklemek için modeller en az

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

aşağıdaki benzeyebilir varsayarsak Membership bir tahmindir, ilham kaynağı django docs

+1

Hiçbir şey eklemezse işe devam etmeli ... – Natim