2014-09-08 5 views
4

У меня есть форма с двумя modelForms. Один из них имеет общий внешний ключ к другому. При сохранении формы я получаю следующую ошибку.Django общий внешний ключ

null value in column "content_type_id" violates not-null constraint 

Вот мой код.

class Restraunt(models.Model): 
    # model fields 

class OpeningHours(models.Model): 
    content_type = models.ForeignKey(ContentType, verbose_name=('content type'),related_name = 'open_shops') 
    object_id = models.PositiveIntegerField(('object ID')) 
    establishment = generic.GenericForeignKey('content_type', 'object_id') 
    # other fields for storing timings 

class RestrauntRegistrationForm(forms.ModelForm): 
    class Meta: 
     model = Restraunt 

class OpeningHoursForm(forms.ModelForm): 
    class Meta: 
     model = OpeningHours 
     exclude = ('content_type', 'object_id', 'establishment',) 

И это мой взгляд, где я сохранить форму

@login_required 
@user_passes_test(is_owner) 
def register(request): 
    if request.method == 'POST': 
     restraunt_registration_form = RestrauntRegistrationForm(request.POST, prefix = 'restraunt') 
     openinghours_form = OpeningHoursForm(request.POST, prefix = 'timings') 
     if restraunt_registration_form.is_valid() and openinghours_form.is_valid(): 
      restraunt = restraunt_registration_form.save() 
      openinghours_form.save(commit = False) 
      openinghours_form.content_object = restraunt 
      openinghours_form.save() 

      return redirect('establishments.views.thanks') 
     else: 
      return HttpResponse('Error in form') 

    else: 
     restraunt_registration_form = RestrauntRegistrationForm(prefix = 'restraunt') 
     openinghours_form = OpeningHoursForm(prefix = 'timings') 

     c = {'restraunt_registration_form': restraunt_registration_form, 
     'openinghours_form': openinghours_form, 
     } 
     c.update(csrf(request)) 

     return render_to_response('establishments/form.html', c) 

ошибка происходит в этой строке

openinghours_form.save() 

Может кто-нибудь сказать мне, что я здесь отсутствует?

+0

ли я слепой или нет ТипСодержимого модель определена? – SuburbanFilth

+0

@SuburbanFilth не знает, как его пропустили, его там в реальном коде. Я редактировал свой вопрос. – pratheekms

ответ

3

Эта строка неверна:

openinghours_form.content_object = restrant 

Должно быть что-то вроде:

openinghours = openinghours_form.save(commit = False) 
openinghours.establishment = restraunt 
openinghours.save() 

Кроме того, вы можете использовать более явные имена:

class OpeningHours(models.Model): 
    establishment_type = models.ForeignKey(ContentType, verbose_name=('content type'),related_name = 'open_shops') 
    establishment_id = models.PositiveIntegerField(('object ID')) 
    establishment = generic.GenericForeignKey('establishment_type', 'establishment_id') 
+0

Я исправил его, но я все еще получаю ту же ошибку. – pratheekms

+0

только что отредактировал мой ответ - используйте создание, очевидно, что и content_type, и object_id будут заполнены. –

Смежные вопросы