2015-12-20 32 views
1

代碼的問題是表單成功通過,但模型並沒有保存Profile模型中的多對多字段。 除食物和類型外,所有的值都被保存。 請幫我看看代碼。 型號爲什麼Form沒有保存多對多的字段值

class Relationship(models.Model): 
    status = models.CharField(max_length =30) 

    def __str__(self): 
     return self.status 

class Food(models.Model): 
    food_name = models.CharField(max_length = 80) 

    def __str__(self): 
     return self.food_name 

class City(models.Model): 
    city = models.CharField(max_length = 80) 

    def __str__(self): 
     return self.city 

class Type(models.Model): 
    types = models.CharField(max_length =80) 

    def __str__(self): 
     return self.types 

class Profile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 
    avatar = models.ImageField(upload_to = image_upload_to) 
    city = models.OneToOneField(City) 
    fav_food = models.ManyToManyField(Food) 
    relationship = models.OneToOneField(Relationship) 
    preferrs = models.ManyToManyField(Type) 

    def get_absolute_url(self): 
     return reverse('chatbot') 

    def __str__(self): 
     return self.user.get_username() 
` 

而且我的模型形式爲遵循

class ProfileForm(ModelForm): 
    class Meta: 
     model=Profile 
     fields = ['avatar','city','fav_food','relationship','preferrs'] 

,我的觀點是遵循

def ProfileCreate(request): 
    template="profile.html" 
    context={} 
    if request.user.get_username()=='': 
     return redirect('account_login') 
    if Profile.objects.all().filter(user__username=request.user.get_username()).count()>0: 
     return redirect('chatbot') 
    else: 

     form = ProfileForm(request.POST ,request.FILES or None) 

     if form.is_valid(): 

      new_profile = form.save(commit=False) 

      user = User.objects.all().filter(username=request.user.get_username())[0] 
      new_profile.user=user 
      new_profile.save() 
      return redirect('chatbot') 

     context['form']=form 


    return render(request,template,context) 

回答

2

既然你與commit=False保存表單,你必須調用形式的保存實例後方法爲save_m2m

new_profile = form.save(commit=False) 
# no need to fetch the user here, just use request.user 
new_profile.user = request.user 
new_profile.save() 
form.save_m2m() 

見關於model form save method的文檔獲取更多信息。

+0

謝謝,而不是new_profile.save_m2m()它將form.save_m2m() –

+0

良好的捕獲,修復。 – Alasdair

相關問題