Fill Foreign Key Field in Form Field with Related Record in Django

I have 2 models Office & Meeting.

class Office(models.Model):

name = models.CharField(verbose_name=u"name",max_length=255)

class Meeting(models.Model):

    meeting_office = models.ForeignKey(Registration,verbose_name=u"Office", on_delete=models.DO_NOTHING, related_name='meeting_office')
date = models.DateField(verbose_name=u"Date", null=False, blank=False)

I have a form that creates the blank meeting successfully

 class MeetingForm(ModelForm):
  class Meta:
    model = Registration
    fields = (
        'date',
        'meeting_office'
    )
    widgets = {
        'date' :forms.TextInput(attrs={'class': 'form-control'}),
        'meeting_office' :forms.Select(attrs={'class': 'form-control'}),

When I want to have a prefilled form, i have a view that is below

def office_add_meeting(request, office_id):
    office = Office.objects.get(pk=office_id)
    form = MeetingForm(request.POST or None)

    if form.is_valid():
        form.instance.meeting_office = office       
        form.save()
        messages.success(request, "Insert Successfull")
        return HttpResponseRedirect('/office_main')

return render(request, 
            'Office/meeting-form.html',
            {"form": form,
            "office_id": office_id}) 

But the form does not prefill the foreign key field. Confirmed the office_id has been passed to the view successfully. Idon't see why the form is not using the defined instance. Any ideas what could be causing this? Or is there a better way?

To set the initial fields on a form, you can use a dictionary matching to the attribute names of the fields.

Try the following:

form = MeetingForm(initial={"meeting_office":your_office})

For editing existing forms, you can also use:

my_meeting = Meeting.objects.all().first() # Example of model
MeetingForm(instance=my_meeting) # Also use instance where you're accepting the form.
Back to Top