ModelForm でフィールドをフィルタリングしようとしています。ビューのジェネリック CreateView をサブクラス化しています。Web で私の問題に関する多くの参照を見つけましたが、解決策は (少なくとも私にとっては) 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)
それは機能します - それは私に加入者リストをもたらしません。しかし、リクエストユーザーを渡そうとすると、常に名前「リクエスト」または名前「自己」が定義されていないというエラーが発生します。
では、コードを変更して、request.user で subscriber_list をフィルタリングし、Django 1.3 の CreateView を引き続き使用するにはどうすればよいでしょうか。