2012-07-09 14 views
5

Ho bisogno di aiuto per superare un errore di django utilizzando i moduli incorporati. Non riesco a capirlo. Potrei probabilmente inserire forzatamente l'eventID se potessi capire come farlo prima che provi a convalidare.La chiave esterna in linea Django non corrisponde alla chiave primaria genitore

Quando presento la mia forma ho un errore: Hidden field (event): The inline foreign key did not match the parent instance primary key

Esiste un modo per fare questo lavoro di codice?

Il seguente codice dovrebbe consentire a un insegnante di iscrivere più studenti per un evento.

------ 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)  

risposta

15

potrebbe essere necessario passare esempio nel post-elaborazione pure.

formset = AttendeeFormSet(request.POST, request.FILES, prefix='attendees', instance=event) 
Problemi correlati