2017-12-04 8 views
0

관련 모델에서 파생 된 두 개의 폼을 가져와 동일한 페이지에 표시하고 함께 저장하려고합니다.여러 개의 관련 django 모델 폼 작업

class userinfo(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key= True, 
on_delete=models.CASCADE) 
    name = models.CharField(max_length = 200, blank = True) 
    email = models.EmailField(max_length= 300, default = 'Null') 
    phone = models.CharField(max_length= 10, default = 'Null') 

    def __unicode__(self): 
     return self.user 

class seller_event(models.Model): 
    event_id = models.AutoField(primary_key=True) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, 
on_delete=models.CASCADE) 
    title = models.CharField(max_length = 300, default = 'Null') 
    description = models.CharField(max_length = 300, default = 'Null') 
    location = models.CharField(max_length= 300, default = 'Null') 
    cash_payment = models.BooleanField(default=False) 
    paytm_payment = models.BooleanField(default=False) 

    def __unicode__(self): 
     return str(self.event_id) + str(self.title) 

당신이 볼 수 있듯이, 사용자 (내 sqlite3를의 DB에서 USER_ID로 저장)는 사용자 정보 테이블에서 외래 키 :

이 내 models.py입니다. 각 판매자별로 여러 이벤트가 나열되도록 노력하고 있습니다.

forms.py :

class Userinfo(forms.ModelForm): 

    class Meta: 
     model = userinfo 
     exclude = {'user'} 

class Seller_event(forms.ModelForm): 

    class Meta: 
     model = seller_event 
     exclude = {'user'} 

views.py :

def newlist(request): 
    if request.user.is_authenticated(): 
     user = request.user 
     print user 
     if request.method == 'POST': 
      userinfo_form = Userinfo(request.POST, instance = user.userinfo) 
      seller_event_form = Seller_event(request.POST, instance = 
user.seller_event) 
      if userinfo_form.is_valid() and seller_event_form.is_valid(): 
       userinfo_form.save() 
       seller_event_form.save() 
       return redirect('/home') 
     else: 
      userinfo_form = Userinfo() 
      seller_event_form = Seller_event() 

     return render(request, 'home/newlist.html', {'userinfo_form': 
userinfo_form, 'seller_event_form': seller_event_form }) 

HTML :

{% load static %} 


<form action="/home/newlist/" method="post"> 

{% csrf_token %} 
{{ userinfo_form.as_p }} 
{{ seller_event_form.as_p }} 

<input type="submit"> 

</form> 

나는이 문제를 의심 userinfo의 경우 사용자 pk가 onetoone 인 반면 모델을 식별하는 데는 문제가 없습니다. 그러나 이는 seller_event의 경우가 아닙니다. 여기는 fk입니다. 그렇다면 어떻게하면 사용자를 fk로 받아 들일 수 있을까요?

미리 감사드립니다.

답변

2

양식 유효성 검사 후 양식을 저장하지 않고 저장 한 다음 외래 키를 설정하고 저장하십시오.

if userinfo_form.is_valid() and seller_event_form.is_valid(): 
    userinfo_form.save() 

    new_seller_event = seller_event_form.save(commit=False) 
    new_seller_event.user = user 
    new_seller_event.save() 

    return redirect('/home') 
+0

감사합니다. seller_event 양식의 인스턴스를 제거해야합니까? – user241691