Как получить зарегистрированную информацию о пользователе в Django forms.py - PullRequest
0 голосов
/ 18 декабря 2009

Я создал модель профиля, включая информацию о поле. Также есть модели под названием Dorm and Registration (не используются для регистрации пользователей), такие как:

class Registration(models.Model):
user = models.ForeignKey(User)
pref1 = models.ForeignKey(Dorm, related_name="pref1",verbose_name=u"Preference 1",null=True)
...
friend1 = models.CharField(u"Friend 1", max_length=15,blank=True)

class Dorm(models.Model):
name = models.ForeignKey(Building)
gender = models.CharField(u"Gender", max_length=1, blank=True, choices=GENDER_CHOICES)

Теперь я пытаюсь сгенерировать форму для этой модели регистрации с формами .ModelForm, как это:

class RegistrationForm(forms.ModelForm):
dorms = Dorm.objects.filter(gender='M')
pref1 = forms.ModelChoiceField(queryset=dorms, empty_label=None)
...
class Meta:
    model = Registration
    exclude = ('user')

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

Я искал документацию, но ничего не смог найти. Вы можете мне помочь? Как узнать информацию о профиле вошедшего в систему пользователя в формах Django?

Ответы [ 2 ]

4 голосов
/ 18 декабря 2009

Таким образом, без использования каких-либо манипуляций с функцией init , вероятно, наилучшим подходом будет "form_factory".

def RegFormFactory(user)

    dorms = Form.objects.filter(gender = "user.gender")
    class _RegistrationForm(forms.ModelForm):
        pref1 = forms.ModelChoiceField(queryset = dorms, empty_label=None)
        class Meta:
            model = Registration
            exclude = ('user')

    return _RegistrationForm

затем используйте:

formclass = RegFormFactory(user)
form_inst = formclass()
...
form_inst = formclass(request.POST)

Это очень хорошо описано в блоге здесь: Итак, вам нужна динамическая форма .

2 голосов
/ 18 декабря 2009

Джеймс Беннетт написал пост в блоге, который должен прекрасно объяснить, что вам нужно: Итак, вам нужна динамическая форма

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