0

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!!

RBM
  • 1

0 Answers0