在 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
我有一个模型:
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