#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 [email protected].
To post to this group, send email to [email protected].
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.