Django Python-从模板中的相关_对象中选择列
我刚从Django开始,试图弄清楚东西是如何工作的。我遇到了以下问题 我有一个模型。py: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
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 %}