Django: Finden Sie alle Onetoonefields, die auf ein Modell zeigen
-
26-10-2019 - |
Frage
Ich schreibe Routinen, um eine Instanz zu inspizieren und alle ihre Beziehungen zu finden (z. instance._meta.get_all_related_objects()
) Aber ich kann keinen Weg finden, Beziehungen mit einem Onetoonefield zu bekommen.
Zum Beispiel mit diesen beiden Modellen:
class Main(models.Model):
...
class Extension(models.Model):
...
main = models.OneToOneField(Main, primary_key=True)
Angesichts einer "Haupt" -Instanz sollte ich seine verwandten Onetoone -Objekte/Klassen finden (offensichtlich ohne Klogen ihrer Namen).
Wie kann ich das machen?
Lösung
from django.db import models
def all_models_with_oto(the_model):
"""
Returns all models that have a one-to-one pointing to `model`.
"""
model_list = []
for model in models.get_models():
for field in model._meta.fields:
if isinstance(field, models.OneToOneField):
if field.rel.to == the_model:
model_list.append(model)
return model_list
Listenverständnisversion auflisten (ironisch langsamer, wahrscheinlich aufgrund any
und verschachtelte Listen):
def all_models_with_oto(the_model):
"""
Returns all models that have a one-to-one pointing to `model`.
"""
return [model for model in models.get_models() if any([isinstance(field, models.OneToOneField) and field.rel.to == the_model for field in model._meta.fields])]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow