I need help to get past django error using inline forms. I can not understand this. Perhaps I could insert an event identifier if I could figure out how to do this before he tries to check.
When I submit my form, I get an error: Hidden field (event): The inline foreign key did not match the parent instance primary key
Is there any way to make this code work?
The following code should allow the teacher to enroll several students for the event.
------ models.py ------------
class Event(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=200)
time = models.DateTimeField()
duration = models.DecimalField(max_digits=5, decimal_places=2)
location = models.CharField(max_length=200)
class Customer(models.Model):
event = models.ForeignKey(Event)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
address1 = models.CharField(max_length=60)
address2 = models.CharField(max_length=60, blank=True)
city = models.CharField(max_length=30)
state = models.CharField(max_length=2)
zipcode = models.CharField(max_length=5)
phone_number = models.CharField(max_length=30)
email = models.EmailField()
class Attendee(models.Model):
event = models.ForeignKey(Event)
sponsor = models.ForeignKey(Customer)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
------ forms.py -----------
class AttendeeForm(forms.ModelForm):
event = forms.IntegerField(required=True, widget=forms.HiddenInput())
class Meta:
model = Attendee
fields = ( 'event', 'last_name', 'first_name', 'gender', 'schoolYr', )
def __init__(self, *args, **kwargs):
super(AttendeeForm, self).__init__(*args, **kwargs)
------- views.py ----------
def register3(request, event_id):
messages = []
try:
event = get_object_or_404(Event, id=event_id)
AttendeeFormSet = inlineformset_factory(Event, Attendee, form=AttendeeForm, extra=1)
if request.method == 'POST':
print "POST"
formset = AttendeeFormSet(request.POST, request.FILES, prefix='attendees')
i=0
for form in formset.forms:
print "Form %s " % str(i)
if formset.is_valid():
attendees = formset.save_all()
print "Yay!!!"
else:
print "Invalid formset"
else:
formset = AttendeeFormSet(instance=event, prefix='attendees')
print "Event: %s " % event
except Event.DoesNotExist:
raise Http404
c = Context({
'messages': messages,
'event' : event,
'attendees': formset,
})
return prepCxt(request, 'register3.html', c)