2016-04-05 47 views
0

models.py:嵌套模型的形式保存:這是必須填寫錯誤

from django.db import models 
from django.contrib.auth.models import User as BaseUser 

CHOICE_GENDER = ((1, 'Male'), (2, 'Female')) 


class Location(models.Model): 
    city = models.CharField(max_length=75) 
    country = models.CharField(max_length=25) 

    def __str__(self): 
     return ', '.join([self.city, self.state]) 


class Users(BaseUser): 
    user = models.OneToOneField(BaseUser, on_delete=models.CASCADE) 
    gender = models.IntegerField(choices=CHOICE_GENDER) 
    birth = models.DateField() 
    location = models.ForeignKey(Location) 

    class Meta: 
     ordering = ('user',) 

forms.py:

from django.contrib.auth.forms import UserCreationForm 
from django import forms 
from .models import Users, Location 


class LocationForm(forms.ModelForm): 
    class Meta: 
     model = Location 
     fields = '__all__' 


class RegistrationForm(UserCreationForm): 
    class Meta: 
     model = Users 
     fields = ('username', 'email', 'first_name', 'last_name', 'gender', 'birth', 'location') 

views.py:

def signup(request): 
    if request.method == "POST": 
     reg_form = forms.RegistrationForm(request.POST) 
     loc_form = forms.LocationForm(request.POST) 
     if loc_form.is_valid(): 
      reg_form.location = loc_form.save() 
      if reg_form.is_valid(): 
       reg_form.save() 
       return redirect('./') 
    reg_form = forms.RegistrationForm() 
    loc_form = forms.LocationForm() 
    return render(request, 'signup.html', {'loc_form': loc_form, 'reg_form': reg_form}) 

我不能設法做這個工作,它給location - This field is required錯誤。我已經嘗試了views.py中的每個組合,並且由於這個原因它從未通過reg_form.is_valid()命令。有人可以幫我嗎?提前致謝!


解決:新的views.py,工作代碼:

def signup(request): 
    if request.method == "POST": 
     reg_form = forms.RegistrationForm(request.POST) 
     loc_form = forms.LocationForm(request.POST) 
     if reg_form.is_valid(): 
      reg = reg_form.save(commit=False) 
      if loc_form.is_valid(): 
       reg.location = loc_form.save() 
       reg.save() 
       return redirect('./') 
    reg_form = forms.RegistrationForm() 
    loc_form = forms.LocationForm() 
    return render(request, 'signup.html', {'loc_form': loc_form, 'reg_form': reg_form}) 

回答

1

刪除locationRegistrationForm領域的元組應停止行爲。

由於您正在使用單獨的位置表單,因此您不應使用RegistrationForm填充location字段。

+0

太棒了,我現在明白了,我已經解決了這個問題 - 雖然很簡單(我將用解決方案代碼更新主要問題)!感謝您的解釋! – MikiSoft