2016-04-05 11 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からフィールドタプルを削除する動作を停止する必要があります。

ロケーションに別のフォームを使用しているため、locationフィールドにはRegistrationFormを入力しないでください。

+0

偉大な、私は今理解して、私は問題を解決しました - それは簡単ですが(私は主な質問をソリューションコードで更新します)!説明ありがとう! – MikiSoft

関連する問題