2013-12-08 197 views
1

我幾乎在使用下面的代碼(我稍微分了下來),我使用自動完成燈來加載用戶,並且用戶可以插入不同的用逗號分隔的人名(用戶)。問題是,當我嘗試保存我獲得以下錯誤如何保存多對多的關係?

ValueError at /write/ 
"<Article: test1>" needs to have a value for field "article" before this many-to-many relationship can be used. 

models.py

class Article(models.Model): 

    author = models.ForeignKey(User,) 
    people = models.ManyToManyField(User, related_name="with", null=True,) 
    content = models.TextField() 

forms.py

class ArticleForm(forms.ModelForm): 
    people = forms.CharField(widget=autocomplete_light.TextWidget('UserAutocomplete')) 
    class Meta: 
     model = Article 

views.py

def write(request): 
    if request.POST: 
     form = ArticleForm(request.POST) 
     if form.is_valid(): 

      content = form.cleaned_data['content'] 
      user = User.objects.get(username=request.user.username) 

      people_str = form.cleaned_data['accompanied'] 
      people = [x.strip() for x in accompanied_str.split(',')] 

      article = Article(
       content = content, 
       author = user, 
       ) 
      for username in accompanied: 
       user = User.objects.get(username=username) 
       article.people.add(user) 

      article.save() 

      return HttpResponseRedirect('/success/') 

回答

2

在爲了創建一個關係,你需要雙方的ID。新創建的文章還沒有ID。如果您先保存文章,然後將人添加到它,它應該工作正常。

article = Article(
    content = content, 
    author = user, 
    ) 

article.save() 

article.add(*User.objects.filter(username__in=accompanied)) 

通過獲取所有具有用戶名列表中的用戶名的用戶的過程可以更便宜。

+0

我不敢相信這是多麼愚蠢,我在它上面3個小時!非常感謝。 – neelix