允许用户重命名对他可见的django模型字段名



我有一个如下的模型。我希望用户能够改变";外部";使用某种形式的Legend的字段名称(即用户可见的内容((内部字段名称应相同:Product.rating1不应更改(。用户打开Product表单,看到字段的默认名称(例如,'Rating 1'称为'Rating 1'(。但是用户应该能够以不同的形式(例如'Rating 1''Some random name'(来改变这一点。这个新的评级名称现在应该为所有Products更改。

class Product(models.Model):
name = models.CharField(max_length=200)
rating1 = models.IntegerField(default=0)
rating2 = models.IntegerField(default=0)
rating3 = models.IntegerField(default=0)
class Legend(models.Model):
rating1_name = models.CharField(max_length=200, default='Rating 1')
rating1_abbr = models.CharField(max_length=2, default='R1')
rating2_name = models.CharField(max_length=200, default='Rating 2')
rating2_abbr = models.CharField(max_length=2, default='R2')
rating3_name = models.CharField(max_length=200, default='Rating 3')
rating3_abbr = models.CharField(max_length=2, default='R3')

所需结果:Product的数据库表将包含多个产品。然而,Legend的数据库表将只包含一个从一开始(自动(创建的条目,它永远不会被删除,字段只会被更改。我想要的基本上是在我的应用程序的一个地方有一个创建这些Product的表单和另一个可以更改这些类别名称的表单(其他地方(。

我不希望Product型号中有其他名称,因为每个产品都会有不同的评级名称。我也不知道如何从一开始就创建最初的Legend数据库条目。

最好的方法是什么?如果我遗漏了一些琐碎的事情,我很抱歉。

Legend对象和form传递到html并在之后

{% for value in Legend %}
{{ value.rating1_name }}: {{ form.rating1 }}
{{ value.rating2_name }}: {{ form.rating2 }}
{% endfor %}

在产品页面中,您可以显示产品的详细信息,如评级字段的名称和值。您还可以显示该特定评级字段的当前名称(图例(。

{% for product in products %}
<h2>{{ product.name }}</h2>
{% for l in legends %}
<h4>{{ l.rating1_name }} = {{ product.rating1 }}</h4>
<h4>{{ l.rating2_name }} = {{ product.rating2 }}</h4>
<h4>{{ l.rating3_name }} = {{ product.rating3 }}</h4>
{% endfor %}
{% endfor %}

然后,您可以有一个完全独立的图例页面,以便用户可以设置图例的值。

{% for l in legend %}
<h3>Legend 1 </h3>
<input type="text" name="rating1" value="{{ l.rating1_name }}">
<h3>Legend 2 </h3>
<input type="text" name="rating2" value="{{ l.rating2_name }}">
<h3>Legend 3 </h3>
<input type="text" name="rating3" value="{{ l.rating3_name }}">
{% endfor %}

然后,您可以使用python逻辑更新图例的新值,您可以制作一个新函数来在视图中执行此特定任务。py,或者您也可以创建一个新文件,并在那里制作一个方法来完成任务。

def _update_legends(request):
for l in legends
l.rating1_name =  l.rating1_name 
l.rating2_name =  l.rating2_name
l.rating3_name =  l.rating3_name

我希望你能理解它,并解决你的问题,我努力让你理解。

最新更新