我是Django的新手,我主要为科学和工程应用编写代码。 Python非常适合这些,我发现自己想要通过更好的界面分享一些应用程序 - 因此我对Django感兴趣。
在我试图移植到Django的一个应用程序中,有几十个参数,每个参数都有一个与用户可编辑关联的注释。这样做是为了让用户可以跟踪这些值的原因。
一个简单的例子是:
class Parameters(models.Model):
telescope = models.ForeignKey(Telescope, on_delete=models.CASCADE)
p_name = models.CharField(max_length=200)
start_date = models.DateTimeField()
end_date = models.DateTimeField()
az_A = models.FloatField('Azimuth A', help_text='words of wisdom')
az_B = models.FloatField('Azimuth B', help_text='words of wisdom')
az_C = models.FloatField('Azimuth C', help_text='words of wisdom')
def __str__(self):
return self.p_name
对于我现在正在处理的情况,值'az_A','az_B','az_C'是固定的,无法以可以输入注释的形式进行编辑。注释必须存储在数据库中(并与正确的参数相关联)。
下一种情况是可以编辑类似值'az_A','az_B','az_C'以及与之关联的注释。
我是否需要制作自定义模型字段或是否有更好的方法?我已经使用help_text进行静态评论,我的印象是我无法通过表单更改此文本(正确吗?)
我感谢任何帮助!
答案 0 :(得分:0)
在我试图移植到Django的一个应用程序中,有 数十个参数,每个参数都有与之关联的注释 这是用户可编辑的。
如果我理解正确,您至少要描述两个不同的字段:浮点数和文本。您无法将它们作为模型中的单个字段。
您可能想要调查定义一个可以重复用于在页面上一起显示和编辑这两个字段的表单。
如果您有一个描述该字段的注释(不只是其中的一个值),那么您希望在该字段的help_text
属性中设置该注释。
答案 1 :(得分:0)
Django有一个MultiValueField field type,它将被子类化为表单显示两个或多个字段的情况,这些字段将转换为单个值以存储在数据库中。相反,可以解析单个数据库值并由多个表单字段表示。
你为什么要这样做?通过查看精彩的django-measurement库来显示一个示例,该库允许单位转换(请参阅forms.py源以获取子类化MultiValueField中使用的方法的示例)。 MultiValueField是MeasurementField的子类,它包含FloatField(用于值)和ChoiceField(用于所需的度量单位)。因此,例如,距离可以输入为英寸,毫米或英里,并且在清理数据库时始终转换为基本单位。从数据库中检索值时,可以将测量值从基本单位转换为对用户最有意义的任何单位。
如果有不可编辑注释的标准逻辑,则可以在MultiValueField级别验证,如果已更改,则引发ValidationError
。否则,允许可编辑性。
这是一个复杂的解决方案,因此很难给出一个代码示例,但如果你不害怕使用一些高级Django,它也是依赖字段的完美解决方案。