class ParametroProducto(models.Model):
parametros_producto = models.CharField(max_length = 30)
tipo_parametro = models.CharField(max_length = 80)
class FamiliaProducto(models.Model):
nombre_familia = models.CharField(max_length = 100)
parametro_familia = models.ManyToManyField(ParametroProducto)
class Producto(models.Model):
nombre = models.CharField(max_length=100, unique=True)
proveedores = models.ManyToManyField(Proveedor, null=True, blank=True)
familia = models.ForeignKey(FamiliaProducto, on_delete=models.CASCADE)
procedencia = models.CharField(max_length=100)
class Recepcion_Envase_Insumo(models.Model):
proveedor = models.ForeignKey(Proveedor, on_delete=models.CASCADE)
responsable = models.ForeignKey(Empleado, on_delete=models.CASCADE)
producto = models.ForeignKey(Producto, on_delete=models.CASCADE)
deposito = models.CharField(null=False,max_length=30)
fecha = models.DateField(null=False,default=date.today)
cantidad = models.IntegerField(null=False)
observaciones = models.TextField()
class ControlEnvIns(models.Model):
envase_insumo = models.ForeignKey(Recepcion_Envase_Insumo, on_delete=models.CASCADE)
parametro_env_ins = models.ForeignKey(ParametroProducto, on_delete=models.CASCADE)
resultados = models.CharField(max_length=100)
observacion = models.CharField(max_length=80)
Forms.py
class FormEnvIns(forms.ModelForm):
proveedor= forms.ModelChoiceField(queryset=Proveedor.objects.filter(activo=True),
widget=forms.Select(),required=True)
producto=forms.ModelChoiceField(queryset=Producto.objects.filter(activo=True),
widget=forms.Select(),label='Insumo')
responsable=forms.ModelChoiceField(queryset=Empleado.objects.filter(activo=True),
widget=forms.Select())
class Meta:
model = Recepcion_Envase_Insumo
fields = [
'fecha',
'proveedor',
'responsable',
'cantidad',
'deposito',
'producto',
'observaciones',
]
labels = {
'fecha':'Fecha de recepcion',
'proveedor':'Proveedor',
'responsable' : 'Responsable',
'cantidad':'Cantidad recibida',
'deposito':'Deposito',
'producto':'MP',
}
widgets = {
'fecha':forms.DateInput(attrs={'readonly':'readonly'}),
'cantidad':forms.NumberInput(),
'deposito':forms.TextInput({'class': 'form-control'}),
'observaciones':forms.Textarea(attrs={'cols': 100, 'rows': 3}),
}
class FControlEnvIns(forms.ModelForm):
parametro_env_ins=forms.ModelChoiceField(queryset=ParametroProducto.objects.all(),
widget=forms.Select(),label='Parametros')
class Meta:
model = ControlEnvIns
fields = [
'parametro_env_ins',
'observacion',
'resultados',
]
labels = {
'observacion':'Observacion',
'resultados':'Resultado ',
}
widgets = {
'observacion':forms.TextInput(attrs={'class':'form-control'}),
'resultados':forms.TextInput(attrs={'class':'form-control'}),
}
View.py
def registro_envase_insumo(request):
if request.method == 'POST':
recepcion_form = FormEnvIns(request.POST)
detalle_form = FControlEnvIns(request.POST)
if recepcion_form.is_valid() and detalle_form.is_valid():
envase_insumo = recepcion_form.save(commit=False)
producto_seleccionado = envase_insumo.producto
parametros = producto_seleccionado.familia.parametro_familia.all()
envase_insumo = recepcion_form.save()
for parametro in parametros:
envase_insumo_det = detalle_form.save(commit=False)
envase_insumo_det.envase_insumo = envase_insumo
envase_insumo_det.parametro_env_ins = parametro
envase_insumo_det.save()
messages.success(request,("Registrado Exitosamente"))
return redirect('listar_recepcion')
else:
messages.error(request,("Error, Verifique los campos"))
for field_name, errors in envase_insumo.errors.items():
for error in errors:
messages.error(request,f"Error en el campo {envase_insumo.fields[field_name].label} : {error}")
else:
recepcion_form = FormEnvIns()
detalle_form = FControlEnvIns()
return render(request, 'recepcion/envase_insumo_conj.html',{'env_ins_form': recepcion_form,'env_ins_det_form': detalle_form})
如何通过在产品字段的“FormEnvIns”表单中选择产品来获取模板中的参数列表,然后获取参数列表并将其显示在FControlEnvIns表单的parametro_env_ins字段中。这是我的观点,我不知道我是否走对了路。我意识到的是,我必须使用JavaScript,但我不知道如何才能做到这一点。FControlEnvIns表单和FormEnvIns表单必须只出现在模板中。
1条答案
按热度按时间lvmkulzt1#
你需要的是向你的后端发送一个请求,检索你想要的数据,并更新DOM元素。正如你提到的,JS是用来实现这一点的。
一个新的视图,它不呈现页面,而只是返回你需要的数据:
在前端。向
product select box
添加事件侦听器,将请求发送到后端,清除param select box
并使用新数据重新填充它。还需要将csrf
令牌附加到请求报头。