Django 管理员更改列表 隐藏用户的选项之一



我有一个带有整数字段的模型。此字段具有选项。 如您所见,请求有 4 种可用状态。我只想在编辑模板上显示其中的三个,芹菜任务每 3 小时将状态从 4 更改为第 12 个状态。因此,当管理面板中的用户只能将状态更改为 1、2 或第三个状态,而不能更改为第 4 个状态时。

型号代码

UNPROVEN = 1
IN_PROGRESS = 2
IN_LINE_FOR_DELETE = 3
DELETED = 4
_STATUS = [
(UNPROVEN, "Unproven"),
(IN_PROGRESS, "In progress"),
(IN_LINE_FOR_DELETE, "In line for deletion"),
(DELETED, "Deleted")
]
delete_user = models.ForeignKey('BoosteroidUser',
on_delete=models.SET(get_deleted_user),
related_name='%(class)s_delete')
delete_reason = models.TextField(max_length=1024)
status = models.IntegerField(default=1,
choices=_STATUS,
blank=False)
responsible_user = models.ForeignKey('BoosteroidUser',
on_delete=models.SET(get_deleted_user),
null=True, blank=True,
default=None)```

Code from admin
```@admin.register(UserDeleteRequest)
class UserDeleteRequest(admin.ModelAdmin):
list_display = ("status", "responsible_user")
fields = ("delete_user", "status", "responsible_user", "delete_reason")
readonly_fields = ("responsible_user", "delete_user", "delete_reason")
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
def save_model(self, request, obj, form, change):
if obj.status == 3 or 2:
obj.responsible_user = request.user
super().save_model(request, obj, form, change)```
So I expected that any user in the admin panel will be able to see and choose only first 3 statuses but not the 4th one
[Expected result][1]

[1]: https://i.stack.imgur.com/ICJ0i.png

您可以创建自定义表单 (UserDeleteRequestForm( 并覆盖status字段

from django.forms import ModelForm, ChoiceField

class UserDeleteRequestForm(ModelForm):
class Meta:
model = UserDeleteRequest
fields = '__all__'
status = ChoiceField(
choices=[
(UserDeleteRequest.UNPROVEN, "Unproven"), 
(UserDeleteRequest.IN_PROGRESS, "In progress"),
(UserDeleteRequest.IN_LINE_FOR_DELETE, "In line for deletion"),
]
)

然后在您的模型管理员中使用它:


@admin.register(UserDeleteRequest)
class UserDeleteRequestAdmin(admin.ModelAdmin):
form = UserDeleteRequestForm
...

相关内容

最新更新