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.

Cómo asignar un valor a un campo uno a uno en Django

Solo estoy comenzando a aprender sobre Django y estoy tratando de asignar un valor a un campo de uno a uno en mis modelos usando manage.py shell. Intento hacerlo de esta manera, pero no entiendo por qué no asigna el valor a Author.address.

author1 = Author.objects.get(first_name="Sam")
addr1 = Address.objects.get(post_code="12345")
author1.address = addr1

¿Me falta algún paso?

class Author(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    address = models.OneToOneField(Address, on_delete=models.CASCADE, null=True)

    def full_name(self):
        return f"{self.first_name} {self.last_name}"

    def __str__(self):
        return self.full_name()


class Address(models.Model):
    street = models.CharField(max_length=80)
    postal_code = models.CharField(max_length=5)
    city = models.CharField(max_length=50)

    def __str__(self):
        return f"{self.street}"

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Por tu muestra de código, parece que el problema está con el nombre del campo en el modelo Address. En el modelo Author, has definido el campo de relación uno a uno como “address”, mientras que en el modelo Address, has definido el nombre del campo como “postal_code”.

    Por lo tanto, para resolver el problema, puedes cambiar el nombre del campo en el modelo Address de “postal_code” a “post_code” o actualizar tu código para usar el nombre de campo correcto. Consulta el código actualizado a continuación:

    author1 = Author.objects.get(first_name="Sam")
    addr1 = Address.objects.get(post_code="12345")
    author1.address = addr1
    author1.save()  # no olvides guardar los cambios
    

    Espero que esto te ayude a asignar el valor al campo uno a uno en los modelos de Django. Hazme saber si tienes alguna pregunta adicional.

Comments are closed.