Django 1.3 CreateView, ModelForm и фильтрация полей по запросу.пользователь

Я пытаюсь отфильтровать поле в ModelForm. Я создаю подкласс общего CreateView для своего представления. Я нашел много ссылок на мою проблему в Интернете, но решения, похоже, не работают (по крайней мере, для меня) с представлениями на основе классов Django 1.3.

Вот мои модели:

#models.py

class Subscriber(models.Model):

    user = models.ForeignKey(User)
    subscriber_list = models.ManyToManyField('SubscriberList')
    ....

class SubscriberList(models.Model):

    user = models.ForeignKey(User)
    name = models.CharField(max_length=70)
....

Вот мой взгляд:

#views.py

class SubscriberCreateView(AuthCreateView):
    model = Subscriber
    template_name = "forms/app.html"
    form_class = SubscriberForm
    success_url = "/app/subscribers/"

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        return super(SubscriberCreateView, self).form_valid(form) 

Вот моя исходная форма для добавления подписчика без фильтра:

#forms.py

class SubscriberForm(ModelForm):

    class Meta:
        model = Subscriber
        exclude = ('user', 'facebook_id', 'twitter_id')

Вот моя модифицированная форма, пытаюсь фильтровать, но не работает:

#forms.py

class SubscriberForm(ModelForm):

    class Meta:
        model = Subscriber
        exclude = ('user', 'facebook_id', 'twitter_id')

    def __init__(self, user, **kwargs):
        super(SubscriberForm, self).__init__(**kwargs)
        self.fields['subscriber_list'].queryset = SubscriberList.objects.filter(user=user)

Если я изменю эту модифицированную форму так:

def __init__(self, user=None, **kwargs)

Это работает - это не приносит мне списков подписчиков. Но в любом случае я пытаюсь передать запрос пользователю, я неизменно получаю имя «запрос» или имя «я», не определенное ошибку.

Итак, как я могу изменить свой код, чтобы фильтровать subscriber_list с помощью request.user и по-прежнему использовать CreateView в Django 1.3.


person Community    schedule 31.07.2011    source источник


Ответы (1)


Я вижу, вы публиковали этот вопрос в разных местах ... и я обнаружил, что это потому, что я пытался понять то же самое. Думаю, у меня все заработало, и вот что я сделал. Я перезаписал get_form() из FormMixin, чтобы отфильтровать определенный набор запросов полей формы:

class MyCreateView(CreateView):

    def get_form(self, form_class):
        form = super(MyCreateView,self).get_form(form_class) #instantiate using parent
        form.fields['my_list'].queryset = MyObject.objects.filter(user=self.request.user)
        return form
person shawnwall    schedule 28.08.2011
comment
как получается, что StackOverflow имеет связь с моим мозгом: очень приятно видеть ответ на мой точный вопрос, но видеть, что ответ датируется примерно тем днем, когда у меня был тот же вопрос, это жутко. - person makapuf; 01.09.2011