作者:mobiledu2502887403 | 来源:互联网 | 2022-12-02 16:56
目标:创建和更新资源时,在django管理表单上显示特定user_id
于请求的只读信息。
此显示应该是一个只读字段(readonly,未禁用)。的user_id
显示被从请求用户派生(request.user
),以使初始值被从设置。
在这篇文章之后,我们应该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
只读状态。实际上,我在任何地方都找不到它。有什么想法吗?
其他帖子建议保存,我打算这样做,但在此之前我需要将其显示在表单上。
1> not2acoder..:
正确的是,将字段设置为只读会将其从base_fields中排除。如文档所述:
此选项中的任何字段(应为列表或元组)将按原样显示其数据,并且不可编辑;它们也从用于创建和编辑的ModelForm中排除。
您可以像list_display一样为它定义一个方法,但是由于需要从请求中设置用户,因此我们需要有request对象,该对象在该方法中不可用。
因此,对于您的用例,我们可以使用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)
希望能帮助到你。