Есть ли способ DJANGO создать конкретный экземпляр формы? - PullRequest
2 голосов
/ 03 декабря 2009

У меня есть форма с полем ModelMultipleChoiceField(). Форма используется для отправки сообщения друзьям пользователя. Это означает, что вместо общего набора запросов (например, Friends.objects.all()) я хочу поставить что-то вроде queryset = user.friends.all().

Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 03 декабря 2009

Примерно так:

#forms.py
class YourForm:
    def __init__(data, user):
       self.base_fields['your_field'].queryset = user.friends.all()
       super(YourForm, self).__init__(data)


#views.py
def your_view(request):
    if request.method == 'POST':
        form = YourForm(request.POST, request.user)
    else:
        form = YourForm(user=request.user)
    [...]
2 голосов
/ 03 декабря 2009

Самый простой способ - сделать замыкание. Не беспокойтесь, если вы не знаете, что это такое, просто определите вашу форму внутри ваш взгляд следующим образом

def my_view(...):
    user = ...
    class MessageForm(ModelForm):
        friends = forms.ModelMultipleChoiceField(queryset=user.friends.all())
        text = ...
    form = MessageForm(...)

Есть и другие способы, но это, безусловно, самый простой.

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