Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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 Python-从模板中的相关_对象中选择列_Python_Django_Django Templates_Django Views - Fatal编程技术网

Django Python-从模板中的相关_对象中选择列

Django Python-从模板中的相关_对象中选择列,python,django,django-templates,django-views,Python,Django,Django Templates,Django Views,我刚从Django开始,试图弄清楚东西是如何工作的。我遇到了以下问题 我有一个模型。py: class Station(models.Model): code = models.CharField(max_length=10, default='') land = models.CharField(max_length=10, default='') def __str__(self): return self.code class Naam(mode

我刚从Django开始,试图弄清楚东西是如何工作的。我遇到了以下问题

我有一个模型。py:

class Station(models.Model):
    code = models.CharField(max_length=10, default='')
    land = models.CharField(max_length=10, default='')

    def __str__(self):
        return self.code

class Naam(models.Model):
    kort = models.CharField(max_length=255, default='')
    middel = models.CharField(max_length=255, default='')
    lang = models.CharField(max_length=255, default='')
    station = models.ForeignKey(Station, default='', on_delete=models.CASCADE, related_name='namen')

    def __str__(self):
        return self.lang
我有一个view.py:

def index(request):
    all_stations = Station.objects.all()
    return render(request,'stations/index.html', {'all_stations' : all_stations})


def detail(request, station_id):
    try:
        station = Station.objects.get(id=station_id)
        stationnamen = station.namen.values()
    except Station.DoesNotExist:
        raise Http404("station does not exist")
    return render(request, 'stations/detail.html', {'stationnamen' : stationnamen.values()})
在html模板中,我试图展示一些关于站点(kort、middel、lang)名称的详细信息。是否可以在queryset中显示特定字段,如:

<h1>{{ stationnamen.kort }}</h1>
这在模板文件中是如何工作的


谢谢

返回返回字典的查询集

您需要在此查询集上循环以获取dict对象。此dict对象将包含所有字段

station1.namen.values('kort')

在这里,您只需过滤字段kort。您的查询集包含仅包含kort信息的dict

values()方法采用可选的位置参数,*fields,用于指定应限制选择的字段名。如果指定字段,则每个字典将仅包含指定字段的字段键/值。如果不指定字段,则每个字典将包含数据库表中每个字段的键和值

比如说Daniel Roseman,您不需要
values()
来访问有关Naam对象的信息。为什么要使用
值()

根据您的需要提供最终解决方案(见备注)

view.py

def index(request):
    all_stations = Station.objects.all()
    return render(request,'stations/index.html', {'all_stations' : all_stations})


def detail(request, station_id):
    try:
        stationnamen = Station.objects.get(id=station_id).namen.all() # Don't need station object.
    except Station.DoesNotExist:
        raise Http404("station does not exist")
    return render(request, 'stations/detail.html', {'stationnamen' : stationnamen})
模板

{% for naam in stationnamen %}
    <h1>{{ naam.koort }}</h1>
    <h1>{{ naam.middel }}</h1>
    <h1>{{ naam.lang }}</h1>
    <h1>{{ naam.station }}</h1>
{% endfor %}
模板(不需要循环)

{{naam.koort}
{{naam.middel}}
{{naam.lang}}
{{naam.station}

希望能有所帮助。

您的问题在于使用
值。这是为少数情况下,当你想得到字典,但大多数时候你只是想通过实际的模型实例

   station = Station.objects.get(id=station_id)
   stationnamed = station.namen.all()
   ....
   return render(request, 'stations/detail.html', {'stationnamen' : stationnamen})
需要了解的另一件事是,每个站点都有许多Naam实例,因此您需要在模板中迭代它们

{% for naam in stationnamen %}
    {{ naam.koort }}
{% endfor %}

谢谢回复!我只是想要模板中的'kort','middel'值。比如:{station.namen.kort}{{station.namen.middel}{{station.namen.lang}}为什么需要FOR语句?万一只是一对一的关系呢?在这种情况下,我觉得一个FOR有点奇怪。嗯,你在用ForeignKey。所以它可以是多对一。如果需要一对一关系,则需要使用wan显示所有字段。所以在你的情况下,这是不好的。您需要使用Daniel解决方案。获取Naam对象的查询集。非常好的回答!现在有道理了。
def detail(request, station_id):
    try:
        naam = Naam.objects.get(station_id=station_id) # Only one Naam object.
    except Station.DoesNotExist:
        raise Http404("station does not exist")
    return render(request, 'stations/detail.html', {'naam' : naam})
<h1>{{ naam.koort }}</h1>
<h1>{{ naam.middel }}</h1>
<h1>{{ naam.lang }}</h1>
<h1>{{ naam.station }}</h1>
   station = Station.objects.get(id=station_id)
   stationnamed = station.namen.all()
   ....
   return render(request, 'stations/detail.html', {'stationnamen' : stationnamen})
{% for naam in stationnamen %}
    {{ naam.koort }}
{% endfor %}