Ich brauche Hilfe, um einen Django-Fehler mithilfe von Inlineformularen zu beheben. Ich kann das nicht herausfinden. Ich könnte wahrscheinlich die EventID erzwingen, wenn ich herausfinden könnte, wie das geht, bevor es versucht, zu validieren.Django Inline-Fremdschlüssel stimmt nicht mit dem übergeordneten Primärschlüssel überein
Wenn ich meine Form ich einen Fehler: Hidden field (event): The inline foreign key did not match the parent instance primary key
Gibt es eine Möglichkeit diesen Code Arbeit zu machen?
Der folgende Code soll es einem Lehrer ermöglichen, mehrere Schüler für eine Veranstaltung anzumelden.
------ 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)
# Customer is a parent, teacher, or school
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()
# A customer can enroll several students for a single event.
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',)
#exclude = ('event',)
#widgets = {
# 'dtgPurchase' : DateTimeWidget(),
#}
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) #Event ID is passed in here.
AttendeeFormSet = inlineformset_factory(Event, Attendee, form=AttendeeForm, extra=1)
#AttendeeFormSet = formset_factory(AttendeeForm)
if request.method == 'POST':
print "POST"
formset = AttendeeFormSet(request.POST, request.FILES, prefix='attendees')
#formset.save(commit=False)
i=0
for form in formset.forms:
print "Form %s " % str(i)
# ?? Is is possible to set the event Here?
if formset.is_valid():
attendees = formset.save_all()
print "Yay!!!"
#return redirect('event_view', event_id=event.id)
else:
print "Invalid formset"
else: # is get method on first step
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)