[英]Django Admin change list Hide one of the choices option for users
I have a model with an integer field.我有一个带有整数字段的模型。 This field has choices option.
该字段有选择选项。 As you can see Request has 4 available statuses.
如您所见,Request 有 4 个可用状态。 I want to display only three of them on the edit template and celery task will change status from 3 to 4th state every 12 hours.
我只想在编辑模板上显示其中三个,芹菜任务将每 12 小时从第 3 个状态更改为第 4 个状态。 So when a user in the admin panel can change the status only to 1, 2 or third status but not to 4th one.
因此,当管理面板中的用户只能将状态更改为 1、2 或第三个状态但不能更改为第 4 个状态时。
Model code型号代码
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
You should look into django-fsm! 您应该研究django-fsm! ( https://github.com/viewflow/django-fsm )
( https://github.com/viewflow/django-fsm )
You can create a custom form ( UserDeleteRequestForm
) and override status
field 您可以创建一个自定义表单(
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"),
]
)
Then use it in your ModelAdmin: 然后在您的ModelAdmin中使用它:
@admin.register(UserDeleteRequest)
class UserDeleteRequestAdmin(admin.ModelAdmin):
form = UserDeleteRequestForm
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.