#29160: Django ModelForm doesn't parse foreign keys in initial= kwarg. -----------------------------------------+------------------------- Reporter: Hameer Abbasi | Owner: nobody Type: Uncategorized | Status: new Component: Forms | Version: 1.11 Severity: Normal | Keywords: initial Triage Stage: Unreviewed | Has patch: 0 Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | -----------------------------------------+------------------------- Django forms don't parse foreign keys in the `initial=` kwarg. It gives a "NOT NULL constraint failed" even if the said data has been specified.
Relevant files: `models.py` {{{ #!div style="font-size: 80%" Code highlighting: {{{#!python from django.db import models class BaseModel(models.Model): pass # Create your models here. class SimpleModel(models.Model): field = models.IntegerField(default=0) hidden_fk = models.ForeignKey(BaseModel, null=False) }}} }}} `forms.py` {{{ #!div style="font-size: 80%" Code highlighting: {{{#!python from django import forms from . import models class SimpleForm(forms.ModelForm): class Meta: model = models.SimpleModel fields = ['field'] SimpleFormset = forms.modelformset_factory(models.SimpleModel, fields=['field'], extra=3) }}} }}} `views.py` {{{ #!div style="font-size: 80%" Code highlighting: {{{#!python from django import views from django.template import loader from django.http import HttpResponse from . import forms from . import models # Create your views here. class FormView(views.View): template = 'thing/form.html' def get(self, request): context = {'form': forms.SimpleForm()} template = loader.get_template(self.template) return HttpResponse(template.render(context, request)) def post(self, request): base_model = models.BaseModel.objects.get(id=1) form = forms.SimpleForm(request.POST, initial={'hidden_fk': base_model}) context = {'form': form} template = loader.get_template(self.template) simple_model = form.save(commit=False) simple_model.field = 1 form.save() return HttpResponse(template.render(context, request)) class FormSetView(views.View): template = 'thing/formset.html' def get(self, request): context = {'formset': forms.SimpleFormset()} template = loader.get_template(self.template) return HttpResponse(template.render(context, request)) def post(self, request): base_model = models.BaseModel.objects.get(id=1) formset = forms.SimpleFormset( request.POST, initial=[{'hidden_fk': base_model}] * forms.SimpleFormset.extra ) context = {'formset': formset} template = loader.get_template(self.template) if formset.is_valid(): formset.save() return HttpResponse(template.render(context, request)) }}} }}} -- Ticket URL: <https://code.djangoproject.com/ticket/29160> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/055.260b4978a50379e522277c2f24dbfc78%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.