自定义表格中的模型字段

时间:2020-09-11 14:03:38

标签: python django

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,我希望用户从以下选项中进行选择:

  • “不,一点也不”(如果选择,它将以Low(低),即0)写入数据库。
  • “是的,有点”(如果选择,它将以Medium(即1)的形式写入数据库)
  • “是的,不时进行一次”(如果选择,这将以High(即2)的形式写入数据库)
  • “是的,每天”(如果选择,它将以非常高的值写入数据库,即3)

对于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 %}

0 个答案:

没有答案