目标:展示特定请求, 只读user_id
创建和更新资源时在 django 管理表单上。
该显示应该是只读字段(readonly,未禁用)。这user_id
显示的内容源自请求用户(request.user
)因此初始值是由此设置的。
下列的这个帖子 https://stackoverflow.com/questions/40604306/how-to-assign-initial-value-to-a-custom-fields-in-modeladmin,我们应该简单地将它设置在get_form
像这样的方法:
def get_form(self, request, obj=None, *args, **kwargs):
form = super(ProfileAdmin, self).get_form(request, *args, **kwargs)
form.base_fields['user'].initial = request.user
return form
然而,用户不再在base_fields
当它是只读的时候。事实上,我到处都找不到它。有什么想法吗?
其他帖子 https://stackoverflow.com/questions/32796938/how-to-set-initial-value-for-read-only-field建议保存,我打算这样做,但我需要它在此之前显示在表单上。
你说得对,创造了这个领域readonly将其排除在base_fields
.正如在docs https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.readonly_fields :
此选项中的任何字段(应该是列表或元组)将按原样显示其数据并且不可编辑;它们也被排除在用于创建和编辑的 ModelForm 之外。
你可以为它定义一个方法,就像list_display
但由于您需要从请求中设置用户,因此我们需要请求对象,该对象在方法中不可用。
因此,对于您的用例,我们可以使用外键的表单字段 https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey方法如下:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'lend_by':
# setting the user from the request object
kwargs['initial'] = request.user.id
# making the field readonly
kwargs['disabled'] = True
return super().formfield_for_foreignkey(db_field, request, **kwargs)
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)