从 META class 动态创建 related_name

Dynamically creating the related_name from META class

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

我希望它是 class 名称,其中 TestModel 变为 test_models 或者甚至是主模型上元 class 的集合名称。

我查看了 self__class__.__name__,但这给了我用户名 class。

是否可以像下面那样做,如果可以的话……

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"

我认为这样处理就足够了 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。当然你可以调整名称并简化模式,如果确定名称不会在多个应用程序之间发生冲突。