2011-02-15 32 views
0

我正在处理一个RSVP表单的项目。现在我可以处理他们的基本信息,包括他们带来的额外客人数量。然后这个数字用于填充下一页上的formset中的X个字段,这些字段只是要求客人的姓名和评论。Django如何将隐藏字段添加到formset并填充它们?

我期望能够做的就是添加一个隐藏字段到客人姓名的formset中,该姓名将包含将他们注册为即将到来的人的姓名。

我已经通过会话数据预先填充了第一个客人姓名和注册客人的信息,我有一个会话变量定义,可以填充隐藏字段。我只需要知道如何将该字段添加到formset。

从django.db进口车型

#models.py 
class Guest(models.Model): 
    ATTENDING_CHOICES = (
     (u'Yes', u'Yes'), 
     (u'No', u'No'), 
     (u'Maybe', u'Maybe?') 
    ) 

    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    email = models.EmailField(max_length=50) 
    attending = models.CharField(max_length=15, choices=ATTENDING_CHOICES) 
    no_of_guests = models.IntegerField(verbose_name='Total # of guests', max_length=3) 
    notes = models.TextField(null=True, blank=True) 
    def __unicode__(self): 
     return u'%s, %s - %s' % (self.last_name, self.first_name, self.email) 

class GuestsAttending(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    comments = models.CharField(null=True, blank=True, max_length=100) 
    #This is the field that I would like to be hidden and filled 
    registered_by = models.CharField(max_length=40, blank=True, null=True, editable=False) 
    def __unicode__(self): 
     return u'%s %s' % (self.last_name, self.first_name) 

和浏览次数:

#views.py 
from django.forms.models import modelformset_factory 

def guest_create(request): 
    context_instance=RequestContext(request) 
    if request.method == 'POST': 
     form = GuestForm(request.POST) 
     if form.is_valid(): 
      request.session['first_name']= request.POST['first_name'] 
      request.session['last_name']= request.POST['last_name'] 
      request.session['e_mail']= request.POST['email'] 
      request.session['no_of_guests']= request.POST['no_of_guests'] 
      form.save() 
      return HttpResponseRedirect('/guest_list_add/') 
    else: 
     form = GuestForm() 
    return render_to_response('rsvp.html', locals(), context_instance,) 

def guest_list_add(request): 
    n = int(request.session['no_of_guests']) 
    context_instance=RequestContext(request) 
    GuestFormset = modelformset_factory(GuestsAttending, extra=int(n)) 
    if request.method == 'POST': 
     formset = GuestFormset(request.POST) 
     if formset.is_valid(): 
      instance = formset.save() 
      return HttpResponseRedirect('/submitted/') 
    else: 
     formset = GuestFormset(queryset=GuestsAttending.objects.none(), initial=[ 
      {'first_name': request.session['first_name'], 
      'last_name': request.session['last_name'], 
     ]) 
    return render_to_response('guest_list_add.html', locals(), context_instance,) 

让我知道,如果你想看到的任何另外代码 - 喜欢的模板可能?

所以,我在一个详细的总结 - 问题,我怎样才能增加我的表单集的request.session数据(第一&姓氏和电子邮件),以每一个“registered_by”领域(查看= guest_list_add,模型= GuestsAttending) 谢谢!

+0

见Django文档:https://docs.djangoproject.com/en/1.7/topics/forms/formsets/#adding-additional-fields-to-a-formset – CpILL 2015-01-13 03:50:36

回答

1

您是否曾尝试在将其保存到数据库之前使用额外的“引用者”数据填充您的formset?

例如,在模型表单集的django文档的saving objects in the formset部分中,如果对表单集执行save(commit=False),然后对表单集内的实例进行迭代,则会看到可以处理表单集上的项。这样,你就可以随心所欲地做任何事情,例如:你可以填写你的推荐人数据。

+0

谢谢!我正在使用类似于下面其他答案中提供的代码,但你的答案是相同的(和第一),所以我给你了复选标记。 – 2011-02-16 16:41:31

+0

我对你的公平感到荣幸,先生。 – 2011-02-16 17:47:29

4

为什么它需要是formset中的隐藏字段?你可以在视图中访问那些东西,为什么不在那里做呢?

if formset.is_valid(): 
    for form in formset: 
     guest = form.save(commit=False) 
     guest.invited_by = "%s %s" (request.session['first_name'], request.session['last_name']) 
     guest.save() 
相关问题