フィールド宣言でrequest.userを使用してストアフィールドを開始することはできません。次のことを試すことができます。
class MyAwesomeForm(forms.ModelForm):
store = forms.ModelChoiceField(Store.objects)
class Meta:
model = Promo
def __init__(self, user, *args, **kwargs):
super(MyAwesomeForm, self).__init__(*args, **kwargs)
self.fields['store'].queryset = Store.objects.filter(owner=user)
フォームをインスタンス化するときに、request.userオブジェクトを渡すことができます。
myform = MyAwesomeForm(request.user)
管理者でこれを実現したい場合は、これを試してみてください。管理者
でログインしているユーザーに関連するオブジェクトのみを提供するために、ModelAdmin.queryset関数を上書きする可能性があります。
class MyModelAdmin(admin.ModelAdmin):
form = MyAwesomeAdminForm()
def queryset(self, request):
qs = super(MyModelAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(store__owner=request.user)
class MyAwesomeAdminForm(forms.ModelForm):
class Meta:
model = Promo
store__ownerは、プロモーションモデルに外部キーフィールドが次のように格納されている場合にのみ機能することに注意してください。
class Promo(models.Model):
store = models.ForeignKey(Store)
class Store(models.Model):
owner = models.ForeignKey(User)
どういうわけか、フォームのinitメソッドにリクエストを渡すことも可能であると思います。しかし、それを行うための適切なアプローチは見つかりませんでした。