gpt4 book ai didi

python - django 形式 __init__ 不包括字段

转载 作者:行者123 更新时间:2023-12-01 05:28:51 26 4
gpt4 key购买 nike

我为我的一个模型的管理页面做了一个自定义操作,其中可以向所有选定的对象授予权限。有一个中间页面,显示要授予权限的用户的多选字段。

整个 Action ,从开始到结束,都运行良好,除非我遇到了一些与“南”相关的(不相关的)问题。作为修复,我必须在表单声明中包含 __init__ 。然而现在,中间流中的用户和选定对象可以正确加载,但单击“确定”按钮后表单不会验证。

根据我的调试,当我使用 if request.POST.get('post'): 时,一旦单击“确定”,它就不会发回 POST。当我使用 if request.method == 'POST': 时,它会在显示表单时发送 POST,但是当单击“确定”时,表单未通过 is_valid() 测试因为缺少字段。

当我不使用 __init__ 时,相同的代码可以完美地工作

from models import ClientInfo
from customauth.models import ZenatixUser


class SelectUserForm(forms.Form):
_selected_action = forms.CharField(widget=forms.MultipleHiddenInput)

def __init__(self, initial, *args, **kwargs):
super(SelectUserForm, self).__init__(*args, **kwargs)
try:
clientObj = ClientInfo.objects.all()[:1].get()
client = clientObj.corp
client_name = client.shortName
client_id = client.cID
userList = ZenatixUser.objects.filter(corp__cID=client_id)
#user = forms.ModelMultipleChoiceField(userList, label=client_name + ' users ')
self.fields['user'] = forms.ModelMultipleChoiceField(userList, label=client_name + ' users ')
self._selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
except ClientInfo.DoesNotExist:
raise Exception('Please add a client info object to the client')


def grant_read_permission(modeladmin, request, queryset):
opts = modeladmin.model._meta
app_label = opts.app_label

form = None

#if request.method == 'POST':
if request.POST.get('post'):
print 'POST'
form = SelectUserForm(request.POST)
print form.errors

if form.is_valid():
print 'Valid'
users = form.cleaned_data['user']
stream_count = queryset.count()
user_count = len(users)
for stream in queryset:
for user in users:
print user, stream
assign_perm('read_stream', user, stream)

plural = ['', '']
if user_count != 1:
plural[0] = 's'
if stream_count != 1:
plural[1] = 's'

modeladmin.message_user(request, "Successfully granted read permission to %d user%s on %d stream%s." % (
user_count, plural[0], stream_count, plural[1]))

return None

if not form:
form = SelectUserForm(initial={'_selected_action': request.POST.getlist(admin.ACTION_CHECKBOX_NAME)})

if len(queryset) == 1:
objects_name = force_unicode(opts.verbose_name)
else:
objects_name = force_unicode(opts.verbose_name_plural)

stream_list = []
for stream in queryset:
stream_list.append(stream.path)

title = _("Are you sure?")

context = {
"title": title,
"objects_name": objects_name,
'queryset': stream_list,
"opts": opts,
"app_label": app_label,
'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
'tag_form': form,
}

return render_to_response("admin/grant_read_permission.html", context,
context_instance=template.RequestContext(request))

最佳答案

您已经从 args/kwargs 列表中提取了一个参数(您将其称为“initial”),并且没有将其传递给 super 调用。实际上,第一个位置参数是表单数据,没有它,表单将永远无效。从方法定义中删除该名称。

关于python - django 形式 __init__ 不包括字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com