【问题标题】:Programmatically identify django foreignkey links以编程方式识别 django 外键链接
【发布时间】:2012-02-05 17:33:12
【问题描述】:

类似于我问here 的问题,如果我想列出模型中的所有外键关系,有没有办法自动检测这些关系(向前和向后)?

具体来说,如果模型 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可以相连,不一定是任意两个对象实际上

【问题讨论】:

    标签: mysql django one-to-many


    【解决方案1】:

    这就是你要找的:

    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
    

    【讨论】:

    • 这不是我想要的。我相信这列出了所有实际相关的对象。因此,如果 mdl_two 中存在链接到 mdl_one 中的对象的对象,它将显示 mdl_two 中该对象的模型名称。但我想要更一般的东西。我想知道mdl_two可以连接到mdl_one。因此独立于实际对象(甚至两个对象之间的实际链接),我只想列出与 mdl_one 相关的 mdl_two 对象。我想让用户知道这种关系是可以定义的,而不是一定是定义的。
    • 所以在这个例子中(如果我弄错了,请纠正我),如果某些对象 mdl_one 没有实际相关的对象 mdl_two,则不会列出 mdl_two?
    • @Ed。 ,我已经编辑了样本。看看这是不是你需要的。如果没有,我将删除答案(如果可以的话,我会改进它)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多