Django ForeignKey на форме с ModelChoiceField исчезает - PullRequest
0 голосов
/ 05 марта 2009

Странная проблема в Джанго с формами:

У меня есть Form.class, определенный следующим образом ...

class MeetingForm(forms.Form):
    owner = forms.ModelChoiceField(
            queryset=Profile.objects.all(),
            widget=forms.HiddenInput() )
    date = forms.DateTimeField()
    name = forms.CharField(max_length=30)
    etc.

И я создаю новые экземпляры, вызывая функцию, подобную этой ...

def newMeetingForm(request,profile) :
    mf = MeetingForm( {
        'date' : date.today(),        
        } )
    return mf

Который работает как положено. За исключением того, что поле "владелец" встречи не заполнено. То, что я должен сделать, это предварительно заполнить поле владельца в newMeetingForm следующим образом:

def newMeetingForm(request,profile) :
    mf = MeetingForm( {
        'date' : date.today(),
        'owner' : profile,
        } )
    return mf

где аргумент "профиль" является объектом профиля.

Однако, когда я запускаю это, форма не отображается.

Я использую это в шаблоне:

{{ form.as_p }}

Но с этой дополнительной строкой 'owner' в newMeetingForm она буквально выглядит как пустая строка. Я предполагаю, что как-то молча происходит сбой, возможно, так как ModelChoiceField пытается отобразить значение владельца, которое я предварительно заполнил. Но значения выглядят хорошо. Так что еще я должен искать?

Ответы [ 2 ]

3 голосов
/ 05 марта 2009

Ваш код выглядит правильно, во многом говоря. На самом деле я запустил на своем компьютере «заглушку» проекта, используя имеющуюся форму и код создания формы, с успешными результатами (правда, я догадался, как может выглядеть модель профиля).

Следует учитывать, что, хотя это не повлияет на рендеринг, вам следует создать экземпляр MeetingForm со словарем в виде initial данных. Если вы передадите его в качестве первого позиционного аргумента, django будет предполагать, что вы подразумеваете, что эти данные являются данными POST, и поэтому форма должна быть проверена. (Прошу прощения, если вы уже знаете это, и где просто краткая информация для постановки вопроса).

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

$ python manage.py shell
>>> from blah.models import Profile
>>> from blah.forms import MeetingForm
>>> from datetime import date
>>> p = Profile.objects.get(id=someid)
>>> mf = MeetingForm(initial={'date':date.today(), 'owner':p})
>>> print mf.as_p()

Это выведет форму и, если есть серьезные взрывы, ошибки также.

Кроме того, и я знаю, что это глупо, но я тоже делал такие вещи :-) (дополнительный набор глаз ... и т.д ...), вы уверены, что передаете переменную 'form' контекст для вашего шаблона рендеринга? И что переменная называется «форма», а не «mf» или что-то в этом роде

Надеюсь, это поможет

0 голосов
/ 05 марта 2009

Вы уверены, что передаете фактический экземпляр профиля в newMeetingForm?

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