0

我有一个模型:

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”)选项/选项。当前myLimit充当扩展模型的基本模型,该模型将默认设置limit_type为“peruser”,并使整个事情只读我使用管理模型的exclude = ('limit_type',).

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

4

1 回答 1

1

您可以为模型定义自定义项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
于 2019-07-28T04:53:42.690 回答