Программно определять ссылки на внешние ключи django - PullRequest
1 голос
/ 05 февраля 2012

Аналогично вопросу, который я задал здесь , если бы я хотел перечислить все отношения внешнего ключа из модели, есть ли способ автоматически определять эти отношения (прямой и обратный)?

В частности, если Модель 1 читает

class Mdl_one(models.Model):
    name = models.CharField(max_length=30)

, а Модель 2 читает

class Mdl_two(models.Model):
    mdl_one = models.ForeignKey(Mdl_one)
    name = models.CharField(max_length=30)

Есть ли какая-нибудь мета-команда, которую я могу запустить из Mdl_one (например, Model_one () ._ meta.one_to_many)) это говорит мне о том, что у mdl_two есть связь с внешним ключом один-ко-многим?Просто, что mdl_one и mdl_two могут быть связаны, не обязательно, что любые два объекта на самом деле являются ?

1 Ответ

1 голос
/ 05 февраля 2012

Это вы ищете:

yourModel._meta.get_all_related_objects()

Пример ( Отредактировано ):

class Alumne(models.Model):
    id_alumne = models.AutoField(primary_key=True)
    grup = models.ForeignKey(Grup, db_column='id_grup')
    nom_alumne = models.CharField("Nom",max_length=240)
    cognom1alumne = models.CharField("Cognom1",max_length=240)
    cognom2alumne = models.CharField("Cognom2",max_length=240, blank=True)
    ...

class Expulsio(models.Model):                             <---!
    alumne = models.ForeignKey(Alumne, db_column='id_alumne')
    dia_expulsio = models.DateField(blank=True)
    ...


>>> from alumnes.models import Alumne as A
>>> for x in A._meta.get_all_related_objects():
...     print x.name
... 
horaris:alumneexclosdelhorari
presencia:controlassitencia
incidencies:entrevista
incidencies:expulsio                                      <---!
incidencies:incidencia
incidencies:incidenciadaula
seguimentTutorial:seguimenttutorial
...