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

Lỗi này là:AttributeError: đối tượng 'ManyRelatedManager' không có thuộc tính 'add'? Tôi làm như thế nào trong trang web django nhưng đã nhận lỗi này

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

Bạn đang sử dụng mô hình thông qua? nếu vậy .add và .create sẽ không hoạt động. – JamesO

Trả lời

60

JamesO là đúng - có vẻ như lĩnh vực Category.articles của bạn có một đường mối quan hệ. Giả sử rằng mô hình của bạn ít nhất giống sau

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

sau đó để thêm một Article đến một Category bạn phải

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

Lưu ý - chúng ta có thể không biết những gì lĩnh vực through được gọi, vì vậy Membership là phỏng đoán, được lấy cảm hứng từ số django docs

+1

Nó sẽ tiếp tục hoạt động nếu thông qua không thêm bất cứ điều gì ... – Natim

Các vấn đề liên quan