Я пытаюсь отфильтровать поле в 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.