django - 按当前用户验证 ModelAdmin 表单
django - validate ModelAdmin forms by current user
我有很多对象都有一个 user
字段,我想用当前用户自动填充这些字段。为此,我有一个 mixin
class AttachUserMixin(object):
def save_model(self, request, obj, form, change):
"""
При сохранении модели присвоить ему текущего юзера
"""
obj.user = request.user
obj.save()
但是,在我的一些模型表单中,我得到了当前用户的一些验证,如下所示:
def clean(self):
data = super(ListForm, self).clean()
if data['type'] == ListTypes.ctr0.value:
existing_lists = (List.objects
.filter(country=data['country'],
user=data['user'],
ad_network=data['ad_network'],
type=data['type'])
.exclude(pk=self.instance.pk)
.all())
如果我从模型表单中删除 user
字段,显然会崩溃。那么如何从 clean
中访问当前用户?
我举例回答:
class X_Form(forms.ModelForm):
def __init__(self,request,*args,**kwargs):
super(X_Form, self).__init__(*args,**kwargs)
self.request = request
def clean(self):
user = self.request.user
...
并在浏览量中
def post_method(request):
form = X_Form(data=request.POST or None,request=request)
...
当然,如果我没有理解错的话,你的意思是
我有很多对象都有一个 user
字段,我想用当前用户自动填充这些字段。为此,我有一个 mixin
class AttachUserMixin(object):
def save_model(self, request, obj, form, change):
"""
При сохранении модели присвоить ему текущего юзера
"""
obj.user = request.user
obj.save()
但是,在我的一些模型表单中,我得到了当前用户的一些验证,如下所示:
def clean(self):
data = super(ListForm, self).clean()
if data['type'] == ListTypes.ctr0.value:
existing_lists = (List.objects
.filter(country=data['country'],
user=data['user'],
ad_network=data['ad_network'],
type=data['type'])
.exclude(pk=self.instance.pk)
.all())
如果我从模型表单中删除 user
字段,显然会崩溃。那么如何从 clean
中访问当前用户?
我举例回答:
class X_Form(forms.ModelForm):
def __init__(self,request,*args,**kwargs):
super(X_Form, self).__init__(*args,**kwargs)
self.request = request
def clean(self):
user = self.request.user
...
并在浏览量中
def post_method(request):
form = X_Form(data=request.POST or None,request=request)
...
当然,如果我没有理解错的话,你的意思是