2016-04-05 27 views
0

models.py:İçiçe modeller tasarrufu formu: Bu alan gereklidir hata

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

Yapamam Bu işi yapmak için yönetmek, location - This field is required hatası veriyor. Görünümler.py'de her birleşimi denedim ve bu nedenle reg_form.is_valid() komutunu hiç geçmedi. Bana yardım eden var mı? Şimdiden teşekkürler! ÇÖZÜLDÜ


:

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

cevap

1

locationRegistrationForm gelen alanlar davranışı durmalı tuple Çıkarma: Yeni, çalışma kodu views.py.

Konum için ayrı bir form kullandığınızdan, RegistrationForm kullanarak location alanını doldurmamalısınız.

+0

Harika, şimdi anlıyorum ve sorunu çözdüm - o kadar kolaydı (ana sorunu çözüm koduyla güncelleyeceğim)! Açıklama için teşekkürler! – MikiSoft