Soy un poco nuevo en aplicaciones web y bases de datos en general, por lo que esta podría ser una pregunta tonta. Quiero hacer un modelo ("CategoryModel") con un campo que apunte a la identificación primaria de otra instancia del modelo (su padre).
class CategoryModel(models.Model):
parent = models.ForeignKey(CategoryModel)
¿Cómo hago esto? ¡Gracias!
python
django
django-orm
sfendell
fuente
fuente
parent
lugar deparentId
, yamy_category_model.parent
que será una instancia deCategoryModel
. Django creará automáticamente un miembroparent_id
que será la clave principal del modelo relacionado.Respuestas:
Puede pasar el nombre de un modelo como una cadena a ForeignKey y hará lo correcto.
Entonces:
O puedes usar la cadena "self"
fuente
Puede usar la cadena 'self' para indicar una autorreferencia.
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
fuente
self
no está presente al definir la propiedad del modelo. Si la propiedad se definiera como parte del__init__()
método u otro, lo sería, comoself
siempre es el primer argumento posicional de cualquier método de instancia de una clase Python.https://books.agiliq.com/projects/django-orm-cookbook/en/latest/self_fk.html
O
https://stackabuse.com/recursive-model-relationships-in-django/
fuente
También debe establecer nulo = Verdadero y en blanco = Verdadero
null = True, para permitir en la base de datos
blank = True, para permitir la validación de formularios
fuente