I am very new very mew to django... I am trying to filter the ModelChoiceField in my 'Detalle_ordenForm' so that it only shows the 'pacientes' (patients in english) that belong to a particular 'propietario' (owner in english)
my models are (only showing what is relevant)
class Propietarios (models.Model):
nombre = models.CharField(null=False, max_length=30)
apellido = models.CharField(null=False, max_length=30)
class Pacientes (models.Model):
mascota = models.CharField(null=False, max_length=30)
propietario = models.ForeignKey(Propietarios, null=False, on_delete=models.CASCADE)
class Orden (models.Model):
propietario = models.ForeignKey(Propietarios, null=True, on_delete=models.SET_NULL)
pago = models.ForeignKey(Metodopago, blank=True, null=True, on_delete=models.SET_NULL)
class Detalleorden (models.Model):
orden=models.ForeignKey(Orden, null=False, on_delete=models.CASCADE)
paciente = models.ForeignKey(Pacientes, null=True, on_delete=models.SET_NULL)
@property
def propietario(self):
return self.order.propietario.id
my view for this particular template is:
def crear_orden(request, pk):
orden = Orden.objects.get(id=pk)
detalles = orden.detalleorden_set.all()
#edit new order
completarOrden = OrdenForm(instance=orden)
if request.method =='POST':
completarOrden = OrdenForm(request.POST, instance=orden)
if completarOrden.is_valid():
ordenCompleta = completarOrden.save()
return redirect(reverse('pos-ordenes'))
#add items to the order
nuevoitem = Detalle_ordenForm(initial={'orden': orden})
if request.method =='POST':
nuevoitem =Detalle_ordenForm(request.POST)
if nuevoitem.is_valid():
nuevoitem.save()
return redirect(reverse('pos-crear_orden', args=[orden.id]))
context = { 'orden' : orden, 'detalles' : detalles, 'nuevoitem' :nuevoitem,
'completarOrden' : completarOrden}
return render(request, 'pos/orden.html', context)
Previosly I have been able to a hard-code filterig using the same method in the 'Detalle_ordenForm' but now I need to do it dynamically based on the 'propietario' y pass to the 'OrderForm'
class OrdenForm(ModelForm):
class Meta:
model = Orden
fields = '__all__'
class Detalle_ordenForm(ModelForm):
prop = Detalleorden.propietario
paciente = forms.ModelChoiceField(queryset=Pacientes.objects.all().filter(propietario = prop))
class Meta:
model = Detalleorden
fields = '__all__'
Many thanks in advance!!