嗨,我有两种型号:
class Country(models.Model):
name = models.CharField(max_length=50)
class City(models.Model):
name = models.CharField(max_length=50)
country = models.ManyToManyField(Country)
现在我想在每个城市的模板名称和国家中显示,但是当我这样做时:
{% for city in cities %}
{{ city.name }}
{{ city.country | linebreaks }}
{% endfor %}
我得到这个:
London
city.Country.None
Berlin
city.Country.None
Paris
city.Country.None
我必须改变什么?
意见:
def city_list(request):
cities = City.objects.all().order_by('name')
return render(request, 'city/city_list.html', {'cities': cities})
编辑:我在模板city.country
上进行了更改,city.country.name
但我只得到了这一点:
London
None
Berlin
None
Paris
None
我不知道国家名称的更改方式为“无”。
第二个问题:我想显示属于国家的每个城市。
def England(request):
cities = City.objects.filter(country__name__exact="England").order_by('-name')
return render(request, 'city/city_list.html', {'cities': cities})
它可以工作,但我希望它会在每个国家/地区自动显示,我不想在一个国家/地区创建一个视图。
我创建了指向国家/地区详细信息的视图,但是如何显示放置在该国家/地区中的城市?
def country_detail(request, pk):
country = get_object_or_404(Country, pk=pk)
return render(request, 'city/country_detail.html', {'country': country})
您的城市模型与国家模型具有“多对多”关系。因此,在您的模板city.country中,它是指针对相关数据内置的django管理器。您需要遍历它:
{% for city in cities %}
{% for country in city.country.all %}
{{ city.name }}
{{ country.name | linebreaks }}
{% endfor %}
{% endfor %}
实际上,我认为您应该具有ForeignKey关系而不是ManyToMany,因为您的“国家/地区”模型中有许多城市,而“城市”中只有一个国家/地区。因此,您的最终代码应为以下代码:
class Country(models.Model):
name = models.CharField(max_length=50)
class City(models.Model):
name = models.CharField(max_length=50)
country = models.ForeignKey(Country)
和您的初始模板代码:
{% for city in cities %}
{{ city.name }}
{{ city.country | linebreaks }}
{% endfor %}
编辑 :
如果要显示属于一个国家/地区的所有城市,django提供了相关的经理,因此您可以使用:
country.city_set.all()
或者,您可以在模型中为您的ForeignKey使用related_name,例如:
class City(models.Model):
name = models.CharField(max_length=50)
country = models.ForeignKey(Country, related_name="cities")
因此,您现在可以使用:
country.cities.all()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句