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

त्रुटि है:विशेषताएँ त्रुटि: '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() 

तो एक Category आप

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

नोट करना चाहिए करने के लिए एक Article जोड़ने के लिए - हम नहीं बता सकते कि through क्षेत्र कहा जाता है, इसलिए Membership एक अनुमान है, django docs

+1

अगर काम कुछ भी नहीं जोड़ता है तो इसे काम करना जारी रखना चाहिए ... – Natim

संबंधित मुद्दे

 संबंधित मुद्दे