2013-05-12 3 views
1

나는 이것에 관해서 내가 발견 할 수있는 거의 모든 것을 시도했지만, 나는 내 문제를 해결할 때 한 가지 제안 만하고있다.Django multi-form 저장

Django의 forms 메서드를 사용하여 동시에 생성 한 양식에 저장하려고합니다. 이 양식에는 ForeignKey 관계가 있습니다.

내 모델 :

class Publisher(models.Model): 
    company = models.CharField(max_length=255) 
    address1 = models.CharField(max_length=255) 
    address2 = models.CharField(max_length=255) 
    city = models.CharField(max_length=255) 
    zipcode = models.CharField(max_length=10) 
    email = models.EmailField(max_length=255) 
    firstname = models.CharField(max_length=255) 
    lastname = models.CharField(max_length=255) 
    tc = models.BooleanField() 
    timestamp = models.DateTimeField(auto_now=True) 
    def __unicode__(self): 
     return self.company 

class PublisherQuestions(models.Model): 
    referal = models.TextField() 
    updates = models.BooleanField() 
    publisher = models.ForeignKey(Publisher) 
    preferredCommunication = models.ForeignKey(PublisherCommunication) 
    def __unicode__(self): 
     return self.publisher 

class PublisherForm(ModelForm): 
    class Meta: 
     model = Publisher 


class PublisherQuestionsForm(ModelForm): 
    class Meta: 
     model = PublisherQuestions 
     exclude = ('publisher') 

내보기 :

def register(request): 
    if request.method == 'POST': 

     form = PublisherForm(data = request.POST) 
     formQuestions = PublisherQuestionsForm(data = request.POST) 
     if form.is_valid() and formQuestions.is_valid(): 
      publisher = form.save() 
      formQuestions.publisher = publisher 
      formQuestions.save() 

      return HttpResponseRedirect('/thanks/') 

그래서, 내가하려고 무엇의 PUBLISHER_ID에 대한 외래 키 게시자와 두 번째 양식 "formQuestions"를 저장하는 것입니다 PublisherForm에서.

불행히도 MySQL/Django에서 다음과 같은 오류가 발생합니다.

Column 'publisher_id' cannot be null 

은 완전한 초보자 질문 할 수 있으며 예 거의 같은 요구 많은 사람들이 있었다,하지만 솔루션 중 누구도 나를 위해 일하지 않는다.

언제나 감사드립니다.

답변

1

당신은 당신이 같은 오류가 발생하는지 여부를 확인하려면 다음을 시도 할 수 있습니다 : commit=False

publisher = form.save() 
questions = formQuestions.save(commit=False) 
questions.publisher = publisher 
questions.save() 

당신은 데이터베이스에 저장하지 않고 Model를 얻을. https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method

실제로 Model을 조작하고 양식이 아닌 Publisher을 추가하십시오. 당신은 내가 당신이 예를 들어이 사용한다고 생각 양식에서 데이터에 액세스해야하는 경우

는 : https://docs.djangoproject.com/en/dev/ref/forms/api/#accessing-clean-data

나는 당신이 조작 할 경우 있도록하는 ModelForm 아닌 Model을 가지고있다 이해하는 방법 Model을 먼저 만들거나 최소한 Model 데이터를 조작하는 가장 깨끗한 방법입니다. 그렇지 않으면 Form 데이터를 조작 할 수 있지만 또 다른 이야기입니다. 원시 데이터 또는 클린 데이터 등을 선택하려고합니다.