python - Do Django backward relations add overhead? -
in django, create models , can optionally specify foreign key on field
class man: ... class dog: ... owner = models.foreignkey(man, on_delete=models.set_null)
you can query each dog
respective owner or dogs man
owner = some_dog.owner all_dogs = some_man.dog_set.all()
if want not create backward relation specified the docs, can do
class man: ... class dog: ... owner = models.foreignkey(man, on_delete=models.set_null, related_name='+')
now no longer have access all_dogs = some_man.dog_set.all()
.
however, additional "building" of backward relation add overhead?
if never ever used all_dogs = some_man.dog_set.all()
matter whether or not
had specified related_name='+'
in dog
? slow things down potentially?
and functionality purely implemented in application side django, or related_name='+'
change database schema itself?
however, additional "building" of backward relation add overhead?
no
if never ever used all_dogs = some_man.dog_set.all() matter whether or not had specified related_name='+' in dog? slow things down potentially?
no, , no.
and functionality purely implemented in application side django, or related_name='+' change database schema itself?
it's implemented python descriptors. in case of foreignkey
, that's reversemanytoonedescriptor
. there no change in database schema, , presence or absence of related name not generate migration.
if haven't disabled relation, should see descriptor objects there attributes on model classes. this:
>>> dog.owner <django.db.models.fields.related_descriptors.forwardmanytoonedescriptor @ 0x105db25d0> >>> man.dog_set <django.db.models.fields.related_descriptors.reversemanytoonedescriptor @ 0x105db27d0>
these objects make django's orm magic work.
Comments
Post a Comment