es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Formulario de Modelo de Django con desplegable de Clave Externa

Tengo un problema y no pude encontrar el error.
Mi campo desplegable con clave externa muestra “Cliente objeto(1)”, pero mis modelos, vistas y formularios son similares en todas las vistas que tienen la misma situación.

Modelo:

class Cliente(models.Model):
    nombre = CharField(max_length=50)
    cnpj = IntegerField()
    fechaCreacion = DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.nombre

Modelo para el producto:

class ProductoCliente(models.Model):
    def rutaArchivo(producto, archivo):
        return os.path.join('productos', producto, archivo) 

    numeroSerie = CharField(max_length=30, null=True)
    producto = CharField(max_length=30)
    archivo = FileField(upload_to=rutaArchivo)
    cliente = ForeignKey(Cliente, on_delete=CASCADE)
    fechaCreacion = DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.id

Vistas:

def NuevoProductoCliente(request):
    crearProductoCliente = FormularioProductoCliente()
    if request.method == 'POST':
        crearProductoCliente = FormularioProductoCliente(request.POST or None)
        if crearProductoCliente.is_valid():
            crearProductoCliente.save()
            return redirect('productos:Producto_Cliente')
    else:
        crearProductoCliente = FormularioProductoCliente()
    contexto = {'crearProductoCliente': crearProductoCliente}
    return render(request, 'productos/NuevoProductoCliente.html', contexto)

Formularios:

class FormularioProductoCliente(ModelForm):
    numeroSerie = fields.CharField(blank=True)
    class Meta:
        model = ProductoCliente
        fields = [
            'numeroSerie',
            'producto',
            'cliente',
            'archivo',
        ]
        labels = {
            'numeroSerie': ('Número de Serie'),
            'producto': ('Producto'),
            'cliente': ('Cliente'),
            'archivo': ('Archivo'),
        }

Resultado:
https://imgur.com/Cft5AOW

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema parece ser que el menú desplegable para el campo “cliente” muestra “Client object(1)” en lugar del nombre real del cliente. Esto probablemente se debe a que el método self en el modelo Cliente está devolviendo el nombre del cliente, pero en realidad debería llamarse str.

    Para solucionar el problema, cambie el método self en el modelo Cliente a str:

    class Cliente(models.Model):
        nome = CharField(max_length=50)
        cnpj = IntegerField()
    
        dateCriacao = DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return self.nome
    

    Esto debería mostrar el nombre real del cliente en el menú desplegable en lugar de “Client object(1)”.

Comments are closed.