如何在django中获取从一个模型到另一个模型的ForeignKey关系的名称?

时间:2012-01-12 14:05:35

标签: django django-models

假设我们知道一个引用另一个的已知任意模型上存在ForeignKey字段,我们如何找到这种关系的名称?

我正在寻找类似的东西:

Spam.field_relating_to(Egg)

会返回u'egg',其中Spam看起来像这样:

from django.db import models

class Spam(models.Model)
    egg = models.ForeignKey(Egg)

这可能吗?

2 个答案:

答案 0 :(得分:4)

在Spam._meta.fields中查找具有rel.to Egg

的第一个字段

答案 1 :(得分:2)

要跟进Max Peterson's answer,可以使用以下代码:

class RelationshipMixin(object):
    def field_relating_to(other):
        for field in self._meta.fields:
            if hasattr(field, 'rel') and field.rel.to == other:
                return field.name
        return None

class Spam(models.Model, RelationshipMixin):
    egg = models.ForeignKey(Egg)

然后

>>> Spam.field_relating_to(Egg)

应该有用。

请注意,这可能与一对一和多对多关系相匹配,因此,如果检查您很重要,则必须稍微更改代码。

Haven没有测试过,所以请仔细检查。