Django - Как мне добавить скрытые поля в форму и заполнить их? - PullRequest
1 голос
/ 15 февраля 2011

Я работаю над проектом, в котором есть форма RSVP. Прямо сейчас у меня есть функция, чтобы обрабатывать их основную информацию, включая количество дополнительных гостей, которых они приносят с собой. Этот номер затем используется для заполнения X числа полей в наборе форм на следующей странице, который просто запрашивает имена гостей и комментарии.

Что я хочу сделать, так это добавить скрытое поле в набор форм имен гостей, которое будет содержать имя человека, который зарегистрировал их как пришедших.

Я уже передаю данные сеанса, чтобы предварительно заполнить имя первого гостя информацией о зарегистрированном госте, и у меня определена переменная сеанса, которая может заполнить скрытое поле. Мне просто нужно знать, как добавить поле в форму.

из импортных моделей 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 (имя, фамилия и адрес электронной почты) в каждое поле «selected_by» в моем наборе форм (view = guest_list_add, model = GuestAttending) Спасибо!

Ответы [ 2 ]

4 голосов
/ 15 февраля 2011

Почему это должно быть скрытое поле в наборе форм?У вас есть доступ к этому материалу в представлении, почему бы не сделать это там?

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()
2 голосов
/ 15 февраля 2011

пытались ли вы заполнить ваш набор данных этими дополнительными данными "передающей ссылки" непосредственно перед тем, как сохранить их в базе данных?

Например, в сохранении объектов в наборе форм документации django по наборам форм модели вы увидите, что вы можете обрабатывать элементы в наборе форм, если вы сделаете save(commit=False) в наборе форм а затем выполнить итерации экземпляров внутри набора форм. Таким образом, вы можете делать с ними практически все, что захотите, например: вы можете заполнить их данными своего реферера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...