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

El error es:AttributeError: ¿El objeto 'ManyRelatedManager' no tiene atributo 'agregar'? Me gusta en la página web de Django, pero tengo este error

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

¿Está utilizando un modelo directo? si es así .add y .create no funcionarán. – JamesO

Respuesta

60

JamesO es correcto - se ve como su campo tiene un Category.articles través de la relación. Suponiendo que sus modelos se asemejan al menos la siguiente

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

continuación, añadir una Article a un Category debe

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

Nota - no podemos decir lo que el campo through se llama, por lo Membership es una suposición, inspirada en django docs

+1

Debería seguir funcionando si el proceso no agrega nada ... – Natim

Cuestiones relacionadas