2011-03-07 4 views
0

모델에서 생성 된 양식에 직면 한 사용자가 있습니다. 모델에 사이트 "섹션"에 대한 외래 키가 있습니다.이 폼을 제출하면 IntegrityError가 반환됩니다 ("section_id"열의 null 값은 null 제약 조건을 위반합니다). 나는 그 문제가 내가 작업하기 시작할 때까지 간단했다라고 생각했다. 버그는 내 개발 서버에서만 발생합니다 (CentOS 릴리스 5.5 (최종)). 내 로컬 환경 (Mac OS X 10.5.8)에서이 문제가 발생하지 않습니다.장고 양식 필드가 저장시 누락되었습니다.

파이썬 쉘에 입력하여 양식 객체를 검사했습니다. 내 dev env에 "section"필드 (form.fields.section)가 없습니다. 프로젝트 코드와 django 버전은 내 로컬과 dev에서 동일합니다. 내 좌절감을 추가하는 것은 사용자가 마주 보는 양식에 숨겨진 "섹션"필드가 있지만 사실상 해당 데이터가 뷰에 게시 될 때 양식 필드가 더 이상 존재하지 않는다는 사실입니다. 이 버그의 원인에 대한 통찰력은 크게 인정 될 것이고 Rogaine의 희생에서 나를 구할 수있을 것입니다.

미리 감사드립니다. Chris.

코드 :

views.py

def event_registration(request, slug): 
    section = get_object_or_404(Section, section__slug=slug) 
    parent_page = Page.objects.get(section=section, slug='overview') 
    page = Page.objects.get(section=section, slug='events-registration') 

    form = EventRegistrationForm(label_suffix='') 
    submitted = False 

    if request.POST.has_key('event'): 
     form = EventRegistrationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      submitted = True 

    context = RequestContext(request) 
    return render_to_response('section/event_registration.html', 
          { 
           'section': section, 
           'page': page, 
           'form': form, 
           'submitted': submitted 
          }, 
          context_instance=context) 

forms.py

class EventRegistrationForm(better_forms.BetterModelForm): 

    class Meta: 
     model = EventRegistration 
     fieldsets = [ 
         ('Step 1', { 
          'fields': ['event', 'guests'] 
         }), 
         ('Step 2', { 
          'fields': ['first_name', 'email', 'last_name', 'phone', 'school_name'] 
         }), 
        ] 

models.py

class EventRegistration(models.Model): 
    section = models.ForeignKey(Theater, verbose_name=_('Section'), 
     help_text=_("The Site Section")) 
    event = models.ForeignKey(Event, verbose_name=_('Event')) 
    guests = models.IntegerField(_('Number of Guests?')) 
    first_name = models.CharField(_('First Name'), max_length=100) 
    last_name = models.CharField(_('Last Name'), max_length=100) 
    email = models.CharField(_('E-Mail Address'), max_length=255) 
    phone = PhoneNumberField(_('Daytime Phone Number')) 
    school_name = models.CharField(_('School Name'), max_length=200, blank=True, null=True) 
+0

몇 가지 코드를 게시하십시오. 즉, forms.py, views.py, models.py – DTing

+0

게시 된 코드. – Kenzic

+0

전체보기를 게시 할 수 있습니까? 폼에 인스턴스를 설정하지 않으므로 저장하려고 할 때 섹션 값이 없습니다. 더 많은 의견을 게시하면 답변을 드릴 수 있습니다. – DTing

답변

0

보기이 시도 :

def event_registration(request, slug): 
    section = get_object_or_404(Section, section__slug=slug) 
    parent_page = Page.objects.get(section=section, slug='overview') 
    page = Page.objects.get(section=section, slug='events-registration') 

    eventr = EventRegistration(section=section) 
    submitted = False 

    if request.method == 'POST': 
     form = EventRegistrationForm(request.POST, instance=eventr) 
     if form.is_valid(): 
      form.save() 
      submitted = True 
    else: 
     form = EventRegistrationForm(label_suffix='', instance=eventr) 

    context = { 
       'section': section, 
       'page': page, 
       'form': form, 
       'submitted': submitted 
       } 
    return render_to_response('section/event_registration.html', context, 
          context_instance=RequestContext(request)) 

편집 : 당신은 그냥

form.save() 
to 
instance = form.save(commit=False) 
instance.section=section 
instance.save() 

을 변경 한 경우

기술적 것도했다. 새 EventRegistration의 섹션 필드를 채우기 전에 db에 커밋해야했습니다.

+0

그것은 일했다! 고맙습니다! 내 코드가 내 지역에서 작동하는 이유를 알고 있습니까? – Kenzic

+0

이것은 추측이지만 로컬 데이터베이스에는 섹션에 null이 없습니다. 제약 조건이 없습니다. – DTing

0

크리스,

데이터베이스의 버전이 동일하지 않은 것처럼 들립니다. 데이터베이스를 별도로 동기화했거나 개발 서버 및 로컬 컴퓨터에서 다른 데이터베이스를 사용하고 있습니까? 전체 모델과 형식을 예제로 게시 할 수 있습니까?

+0

그의 데이터베이스가 동기화되지 않은 것 같습니다. 그는 자신의 양식이 자신의 섹션 fk에 값을 전달하지 않으므로 db 무결성 오류가 발생합니다. 따라서 null이 아닌 제한된 db 열에 null을 저장하려고합니다. – DTing

+0

데이터베이스가 동기화 된 것처럼 보입니다. – Kenzic