使用ForeignKey字段在Django中创建多个模型的模板
我有两个这样的模型:使用ForeignKey字段在Django中创建多个模型的模板,django,python-3.x,django-models,django-views,django-templates,Django,Python 3.x,Django Models,Django Views,Django Templates,我有两个这样的模型: class NominaEnc(models.Model): G1 = "PERSONAL" G2 = "SUPERVISOR" G3 ="AUXILIAR" GRUPO_CHOICES = ( (G1, 'PERSONAL'), (G2, 'SUPERVISOR'), (G3, 'AUXILIAR'), ) fecha_nomina= models.DateField()
class NominaEnc(models.Model):
G1 = "PERSONAL"
G2 = "SUPERVISOR"
G3 ="AUXILIAR"
GRUPO_CHOICES = (
(G1, 'PERSONAL'),
(G2, 'SUPERVISOR'),
(G3, 'AUXILIAR'),
)
fecha_nomina= models.DateField()
planta =models.ForeignKey(PlantaNomina,to_field='descripcion_planta',on_delete=models.CASCADE)
area=models.ForeignKey(AreaNomina, on_delete=models.CASCADE, to_field='descripcion_area')
linea =models.ForeignKey(lineaNomina, on_delete=models.CASCADE, to_field='descripcion_linea')
grupo=models.CharField(choices=GRUPO_CHOICES, max_length=30, blank=True, null =True)
supervisor=models.ForeignKey(SupervisorNomina, on_delete=models.CASCADE,
to_field='nombre_supervisor')
semana = models.IntegerField(default=1 )
plantilla = models.IntegerField(default=0)
def __str__(self):
return'{} {} {} {} {}'.format(self.semana, self.area, self.linea, self.grupo,
self.supervisor)
class Meta:
verbose_name_plural ="Encabezados Nomina"
verbose_name = "Encabezado Nomina"
class NominaDet(models.Model):
nomina = models.ForeignKey(NominaEnc, related_name='detalles' ,on_delete=models.CASCADE)
concepto=models.ForeignKey(ConceptoNomina, on_delete=models.CASCADE, to_field='concepto')
cantidad =models.FloatField(default=0.0)
def __str__(self):
return "{} {}".format(self.nomina,self.concepto)
class Meta:
verbose_name_plural ="Detalles Nomina"
verbose_name = "Detalle Nomina"
我的意见是:
class NominaList( generic.ListView):
model=NominaEnc
template_name='nomina/nomina_list.html'
context_object_name='nomina'
class NominaCompletaList(generic.ListView):
template_name='nomina/nomina_completa.html'
context_object_name='nomina'
queryset = NominaEnc.objects.all()
def get_context_data(self, **kwargs):
context = super(NominaCompletaList, self).get_context_data(**kwargs)
context['detalles'] = NominaDet.objects.all()
context['encabezado'] = self.queryset
return context
网址为:
urlpatterns = [
path('nomina/', NominaList.as_view(), name="nomina_list"),
path('nomina_completa/', NominaCompletaList.as_view(), name="nomina_completa")
]
在NominaList视图中,我只列出nominanec的字段,在NominaCompleta视图中,我试图显示nominanec(标题)和NominaDet(每个nominanec记录的详细信息)
但是我不知道如何为NominaCompleta视图创建模板。非常感谢您为制作模板(html)和调用展位模型的所有字段提供的任何帮助。在您的模型中,一个
nominanec
可以有多个NominaDet
(因为您与外键有一对多的关系)
因此,如果在模板中有一个nomina_enc
实例(例如,在for循环中),则可以执行以下操作
{nomina_enc.detalles.all%中det的百分比]
{{det.cantidad}
{%endfor%}
或者你需要在循环中做的任何事情。我发现了一个类似的问题,但是,他们没有在你的模型中创建模板,一个
nomineanc
可以有多个NominaDet
(因为你和你的外键有一对多的关系)。因此,如果您的模板中有一个nomina_enc
实例(例如,在for循环中),那么您可以在nomina_enc.detalles.all%}中执行{%for det%}
然后例如打印{{det.cantidad}
。谢谢您的工作!!!如果你把答案写成n,我会接受的@dirkgrotenThank你这么多我有两个模型你知道如何将数据导出到excel文件吗?