我正在开发一个有RSVP表格的项目。现在我有它的功能来处理他们的基本信息,包括他们带来的额外客人的数量。然后,此数字用于填充下一页的表单集中的X个字段,这些字段仅询问客户名称和注释。
我希望能够做的是在客人名称的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数据(名字和姓氏和电子邮件)添加到我的formset中的每个“registered_by”字段(view = guest_list_add,model = GuestsAttending) 谢谢!
答案 0 :(得分: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()
答案 1 :(得分:2)
您是否尝试在将其保存到数据库之前使用其他“引荐来源”数据填充您的formset?
例如,在django关于modelform formsets的文档的saving objects in the formset部分中,如果在formset上执行save(commit=False)
,然后迭代,您将看到可以处理formset上的项目formset中的实例。这样,你可以用它们做任何你想做的事情,例如:你可以用你的推荐人数据来填充它们。