在 Django 中将一些选择数组的元素设置为只读?

Make some elements of choice array readonly in Django?

我有一个模型:

class myLimit(models.Model):
    limit = models.PositiveSmallIntegerField(help_text="The upper limit of the number of points that can be used.")
    TYPES_OF_LIMITS = [('perday','Limit Per Day'),('lifetime', 'Lifetime Limit'),('peruser', 'Per User'),]
    limit_type = models.CharField(choices=TYPES_OF_LIMITS, max_length=20, default='lifetime')

    ...

我想知道如何禁用(或将其设为只读)"peruser" ("Per User") choice/option。当前的 myLimit 充当扩展模型的基础模型,扩展模型将 limit_type 的默认值设置为 "peruser",并使整个模型在我使用管理模型的 exclude = ('limit_type',) 时只读。

我在调用 super 方法之前在扩展模型的 save() 方法中设置了默认值。主要问题仍然存在:如何将一些选择设置为只读?我已经阅读了有关将整个字段设置为只读、将其隐藏以及其他内容的教程,但还没有找到一种方法将 "only some choices" 设置为只读。

您可以为您的模型定义自定义 ModelForm,您可以在其中覆盖您的字段以更改可用选项

class mylimitForm(forms.ModelForm):

    class Meta:
        fields = ('limit', 'limit_type', ...)

    limit_type = forms.ChoiceField(choices=CHOICES_EXCLUDING_READONLY_ONES)

然后,如果您想在管理员中使用此表单,您只需在 ModelAdmin

中进行设置
class mylimitAdmin(admin.ModelAdmin):

    form = mylimitForm