Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:根据字段值从模型返回字段选择?_Django - Fatal编程技术网

Django:根据字段值从模型返回字段选择?

Django:根据字段值从模型返回字段选择?,django,Django,我正在处理一些我几乎无法控制的数据。我只想返回模型中不确定的“无趣”值(例如“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, v

我正在处理一些我几乎无法控制的数据。我只想返回模型中不确定的“无趣”值(例如“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") 
在我的模板中,我返回一个庄园查询集,如果hills字段不是无趣的,我想输出如下内容:

{% for manor in manors %}
{% if manor.hills %}<li>Hills blah blah: {{ manor.hills }}</li>{% endif %}
{% endfor %}
但我不知道如何访问模板中字典的各个值:

{% if manor.get_field_dictionary['hills'] %}<li>Hills blah blah: {{ manor.get_field_dictionary['hills'] }}</li>{% endif %}
试试这个

{% for k,v in manor.get_field_dictionary %}
  {% ifequal k "hills" %}
    <li>Hills blah blah: {{v}}</li>
  {% endifequal %}
{% endfor %}
{manor.get_field_dictionary%}
{%ifk“hills”%}
  • 山上的废话:{{v}
  • {%endifequal%} {%endfor%}

    假设model方法起作用,那么应该得到您想要的东西。

    根据您使用的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 %}
    

    谢谢这是可行的,但感觉效率很低,因为我在模型中有30个字段。有没有办法返回一个只附带有感兴趣字段的查询集?谢谢!不幸的是,我不能使用'in'操作符,因为我正在运行Django 1.1。编辑queryset看起来是一种方法。请您再给我一点帮助,我应该把这些代码放在哪里,在models.py或views.py中?如何获取所需的查询集(实际上是一个过滤的查询集),然后将编辑后的查询集返回模板?非常感谢…我认为您在视图中需要它,因为它不处理模型的单个实例。如果你打算经常使用它,也许可以把它分解成一个函数。只需使用常规django db api捕获所需的查询集,然后将其推送到模板上即可。好的-对此很抱歉-因此在views.py中,我现在有:all_manors=manors.objects.filter(structidx_uin=place_id)——对于all_manors中的manor:--但该代码中的field.value_to_string(self)给了我一个错误:“未定义全局名称‘self’”. 我是否应该使用其他东西而不是“self”?只需在不使用self调用的情况下尝试,使用manor实例即可。我认为自我是我这边的一个错误。我编辑了上面的代码以反映这一点。我最终将其作为模型上的一个方法添加到了“returnself”。谢谢你的帮助,我一个人永远也得不到。
    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 %}
    
    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))