Django版本是3.1,Python版本是3.7
在以供用户使用的形式显示模型字段选项时,我有一个关于自定义模型字段选项的问题。
我有一个模型,其中有很多字段需要指定级别。级别需要以从1到3的数字形式存储在数据库中,以便于过滤(当有人想要过滤级别不完全为2,但假设为2或更高)的对象时,它就不能为字符串值。 由于这些级别字段很多,因此我决定使用Choices会很有用。
models.py
class Cat(models.Model):
LOW = 0
NORMAL = 1
HIGH = 2
VERY_HIGH = 3
LEVEL_CHOICES = (
(LOW, 'Low'),
(MEDIUM, 'Medium'),
(HIGH, 'High'),
(VERY_HIGH, 'Very high'),
)
first_attribute_level = models.IntegerField(choices=LEVEL_CHOICES, default=LOW)
second_attribute_level = models.IntegerField(choices=LEVEL_CHOICES, default=LOW)
third_attribute_level = models.IntegerField(choices=LEVEL_CHOICES, default=LOW)
fourth_attribute_level = models.IntegerField(choices=LEVEL_CHOICES, default=LOW)
现在,当我在视图上将该模型显示为表单时,用户可以在其中添加Cat实例(不在Admin中),显而易见的预期行为是一个选择列表,其中包含选项LOW,MEDIUM,HIGH和VERY HIGH。 我想做的是为每个属性自定义文本以显示其他内容。 例如,对于first_attribute_level,我希望用户从以下选项中进行选择:
对于second_attribute_level:
“从不”(如果选择,它将以低为0的形式写入数据库)
“有时”(如果选择,它将以“ Medium”(即1)写入数据库)
“每周一次”(如果选择,它将写入数据库High,即2)
“每月”(如果选择,它将以非常高的值写入数据库,即3)
对于另外2个属性,显示的文本将完全不同。 有没有办法将显示的文本硬编码到模型本身中呢?我希望该网站使用两种不同的语言,因此硬编码不是一种选择。
这是cat_form.html
{% extends "base.html" %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit" />
</form>
{% endblock %}