Django内联外键与父主键不符 [英] Django inline foreign key does not match parent primary key

查看:250
本文介绍了Django内联外键与父主键不符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一些帮助,使用内联表单过去一个django错误。我似乎无法弄清楚这一点。我可以强制插入eventID,如果我可以弄清楚在尝试验证之前怎么做。

I need some help getting past a django error using inline forms. I can't seem to figure this out. I could probably force-insert the eventID if I could figure out how to do that before it tries to validate.

当我提交表单时,我收到一个错误:code>隐藏字段(事件):内联外键与父实例主键不匹配

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 is supposed to let a teacher enrol multiple students for an event.

------ models.py ------------

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

------表格.py -----------

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

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


推荐答案

您可能需要在POST处理中传递实例。

You may need to pass instance in POST processing as well.

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

这篇关于Django内联外键与父主键不符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆