我正在处理一些我无法控制的数据。我只想返回我的模型中不是某些“无趣”值的字段(例如“0”,“X”或“ - ”),并在模板中单独访问它们。
我的模型是这样的:
class Manors(models.Model):
structidx = models.IntegerField(primary_key=True, verbose_name="ID")
hills = models.CharField(max_length=100, null=True, blank=True, verbose_name="Number of fields")
在我的模板中,我返回了一个Manors的QuerySet,我想输出类似的内容,如果丘陵场不是无趣的话:
{% for manor in manors %}
{% if manor.hills %}<li>Hills blah blah: {{ manor.hills }}</li>{% endif %}
{% endfor %}
我想在模板中避免太多逻辑。理想情况下,庄园对象根本不会返回附加不感兴趣的字段,然后我就可以{% if manor.hills %}
。
---- UPDATE ----我可以使用字典,如下所示,但感觉非常低效 - 最好只返回附带有趣字段的QuerySet。那可能吗? -----------
我尝试编写一个模型方法,返回有趣值的字典,如下所示:
def get_field_dictionary(self):
interesting_fields = {}
for field in Manors._meta.fields:
if field.value_to_string(self) != "N" and field.value_to_string(self) != "0" and field.value_to_string(self) != "-" and field.value_to_string(self) != "X":
interesting_fields[field.name] = field.value_to_string(self)
return interesting_fields
但我不知道如何在模板中访问字典的单个值:
{% if manor.get_field_dictionary['hills'] %}<li>Hills blah blah: {{ manor.get_field_dictionary['hills'] }}</li>{% endif %}
给出了TemplateSyntaxError。有一个更好的方法吗?
UPDATE :最后,它作为模型上的方法完成了。
def get_interesting_queryset(self):
for field in Manors._meta.fields:
if field.value_to_string(self) is None or field.value_to_string(self) == "N" or field.value_to_string(self) == "0" or field.value_to_string(self) == "-" or field.value_to_string(self) == "X" or field.value_to_string(self) == "":
delattr(self, str(field.name))
return self
答案 0 :(得分:0)
试试这个......
{% for k,v in manor.get_field_dictionary %}
{% ifequal k "hills" %}
<li>Hills blah blah: {{v}}</li>
{% endifequal %}
{% endfor %}
假设模型方法有效,那应该可以得到你想要的东西。
答案 1 :(得分:0)
根据您使用的Django版本,您应该使用“in”运算符。让我们带你的模型功能。让它输出一个清单。
def get_field_list(self):
interesting_fields = []
for field in Manors._meta.fields:
if field.value_to_string(self) != "N" and field.value_to_string(self) != "0" and field.value_to_string(self) != "-" and field.value_to_string(self) != "X":
interesting_fields[] = field.value_to_string(self)
return interesting_fields
然后。在您的模板中执行以下操作。
{% if 'hills' in manor.get_field_list %}<li>Hills blah blah: {{ manor.hills }}</li>{% endif %}
另请注意,一旦拥有了查询集IIRC,就可以对其进行编辑。因此
for manor in Manors.objects.all():
for field in Manors._meta.fields:
if field.value_to_string(manor) == "N" or field.value_to_string(manor) == "0" or field.value_to_string(manor) == "-" or field.value_to_string(manor) == "X":
delattr(manor, field.value_to_string(self))