40 votes

AttributeError: l'objet 'ManyRelatedManager' n'a pas d'attribut 'add'? J'aime bien le site web de Django mais j'ai eu cette erreur

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

L'erreur est:

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

65voto

danodonovan Points 5268

JamesO est correct - il ressemble à votre Catégorie.articles de champ a une relation d'aide. En supposant que vos modèles, au moins, ressembler à la suivante

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

puis ajouter un Article d'un Category vous devez

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

Remarque: nous ne pouvons pas dire ce que l' through champ est appelé, ainsi Membership est une supposition, inspiré par le django docs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X