Python 当模型在不同的应用程序中时,有许多字段django模板
我的问题类似于。 我有两个模型与m2m字段链接,我想在模板中渲染字段。当我的两个型号在不同的应用程序中时,我如何做到这一点:Python 当模型在不同的应用程序中时,有许多字段django模板,python,django,templates,many-to-many,Python,Django,Templates,Many To Many,我的问题类似于。 我有两个模型与m2m字段链接,我想在模板中渲染字段。当我的两个型号在不同的应用程序中时,我如何做到这一点: apps/qapp/models class Area(models.Model): name = models.CharField(max_length=100, primary_key=True) def __unicode__(self): return self.name apps/worksheets/models clas
apps/qapp/models
class Area(models.Model):
name = models.CharField(max_length=100, primary_key=True)
def __unicode__(self):
return self.name
apps/worksheets/models
class Place(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100, primary_key=True)
area = models.ManyToManyField('qapp.Area',related_name='area')
正如Schwobasegll提到的,事实上你们的模型在不同的应用程序中并没有区别。通过
manytomy
关系连接的渲染字段应该基本相同
如果我理解正确,问题是您没有使用相关的\u名称
,并且您共享的代码片段实际上不是您的实际代码
但为了完整起见,万一将来有人发现这个问题:
不强制使用相关的\u名称
。如果manytomy
关系定义为:
class Place(models.Model):
# ...
area = models.ManyToManyField('qapp.Area')
在区域
实例中,您将能够如下导航:
area = Area.objects.get(pk=1)
places = area.place_set.all()
因为Django会自动添加一个反向关系%(model\u name)\u set
。如果您设置了一个相关的\u名称
,它将覆盖默认名称
最后,为了增强代码的可读性,与区域
模型的关系将更好:
class Place(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100, primary_key=True)
areas = models.ManyToManyField('qapp.Area', related_name='places')
对manytomy
关系使用复数形式。毕竟,它是两侧区域
和位置
的集合,因此区域
和位置
现在,要在模板中呈现一个
ManyToMany
字段,您可以这样做(考虑到您的视图返回了一个名为Area
的Area
实例):
<h1>Currect area: {{ area.name }}</h1>
<h2>Places:</h2>
<ul>
{% for place in area.places.all %}
<p>{{ place.name }}</p>
{% endfor %}
</ul>
当前区域:{{area.name}
地点:
{area.places.all%中的位置为%s}
{{place.name}
{%endfor%}
正如Schwobasegll所提到的,事实上,您的模型在不同的应用程序中并没有什么区别。通过多个
关系连接的渲染字段应该基本相同
如果我理解正确,问题是您没有使用相关的\u名称
,并且您共享的代码片段实际上不是您的实际代码
但为了完整起见,万一将来有人发现这个问题:
使用related\u name
不是强制性的。如果manytomy
关系定义为:
class Place(models.Model):
# ...
area = models.ManyToManyField('qapp.Area')
在区域
实例中,您将能够如下导航:
area = Area.objects.get(pk=1)
places = area.place_set.all()
因为Django会自动添加反向关系%(型号名称)\u set
。如果设置相关的\u名称
,它将覆盖默认名称
最后,为了增强代码的可读性,与区域
模型的关系将更好:
class Place(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100, primary_key=True)
areas = models.ManyToManyField('qapp.Area', related_name='places')
对manytomy
关系使用复数形式。毕竟,它是两侧区域
和位置
的集合,因此区域
和位置
现在,要在模板中呈现一个
ManyToMany
字段,您可以这样做(考虑到您的视图返回了一个名为Area
的Area
实例):
<h1>Currect area: {{ area.name }}</h1>
<h2>Places:</h2>
<ul>
{% for place in area.places.all %}
<p>{{ place.name }}</p>
{% endfor %}
</ul>
当前区域:{{area.name}
地点:
{area.places.all%中的位置为%s}
{{place.name}
{%endfor%}
有两种方法可以在模板中显示m2m字段数据
place1=Place.objects.filter(id=1)
现在在模板中:
{% for place2 in place1 %}
{% for area1 in place2.area.all %}
<p>{{area1.name}}</p>
{% endfor %}
{% endfor %}
{place1%中place2的%
{place2.area.all%中区域1的%
{{area1.name}
{%endfor%}
{%endfor%}
我特意采用了上述变量,以便新手了解将哪个变量放在何处。有两种方法可以在模板中显示m2m字段数据
place1=Place.objects.filter(id=1)
现在在模板中:
{% for place2 in place1 %}
{% for area1 in place2.area.all %}
<p>{{area1.name}}</p>
{% endfor %}
{% endfor %}
{place1%中place2的%
{place2.area.all%中区域1的%
{{area1.name}
{%endfor%}
{%endfor%}
我特意采用了上述变量,以便新手能够理解将哪个变量放在哪里。请这样做:
areas=models.ManyToManyField('qapp.Area',related_name='places'))
在不同的应用程序中,表单字段没有什么区别。到底是什么问题?好吧,我的错,我没有使用相关的名称。谢谢:areas=models.ManyToManyField('qapp.Area',related\u name='places'))
在不同的应用程序中,表单字段没有什么不同。到底是什么问题?好吧,我的错,我没有使用相关的名称。thanksI最初认为不同应用程序中的m2m字段行为不同,所以我感到困惑。你是对的,代码片段仅供参考。感谢你提供完整的示例问题的规划。顺便说一句,你的教程很棒。我最初认为不同应用程序中的m2m字段表现不同,所以我感到困惑。你是对的,代码片段仅供参考。感谢你对问题提供了完整的解释。顺便说一句,你的教程很棒。