从META类动态创建related_name

时间:2015-06-01 17:18:49

标签: python django django-models

我的大多数Django模型使用相同的User Mixin,因此我想为该字段动态创建related_name

我希望它是TestModel成为test_models的类名,或者甚至是主模型上元类的集名。

我查看了self__class__.__name__,但这给了我User类的名称。

是否有可能像下面这样做,如果是这样......

class User(models.Model):
    user = models.ForeignKey(USER, related_name=META.related_name)

    class Meta:
        abstract = True


class TestModel(User):
    title = models.CharField(max_length=80)

    class Meta:
        related_name = "test_model"

1 个答案:

答案 0 :(得分:8)

我认为像documented here这样处理它可能就足够了。

# myapp/models.py
class User(models.Model):
    user = models.ForeignKey(
        USER, 
        related_name="%(app_label)s_%(class)s_related"
    )

    class Meta:
        abstract = True


class TestModel(User):
     title = models.CharField(max_length=80)

这样,相关名称将动态变为 myapp_testmodel_related 。当然,如果确定名称不能在多个应用程序之间发生冲突,您可以调整名称并简化模式。