Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django多个外键和相同的相关名称_Python_Django - Fatal编程技术网

Python Django多个外键和相同的相关名称

Python Django多个外键和相同的相关名称,python,django,Python,Django,我想使用userforeignkey来创建许多模型。我不能用这种方法。是为所有外键指定通用名称的任何可能方法。我想访问每个模板中的x.created或x.updated class Model_one(models.Model): -- -- created = models.ForeignKey(User,related_name="created") updated = models.ForeignKey(User,related_name="updated"

我想使用
user
foreignkey来创建许多模型。我不能用这种方法。是为所有外键指定通用名称的任何可能方法。我想访问每个模板中的
x.created
x.updated

class Model_one(models.Model):
    --
    --
    created = models.ForeignKey(User,related_name="created")
    updated = models.ForeignKey(User,related_name="updated")


class Model_two(models.Model):
    --
    --
    created = models.ForeignKey(User,related_name="created")
    updated = models.ForeignKey(User,related_name="updated")


class Model_three(models.Model):
    --
    --
    created = models.ForeignKey(User,related_name="created")
    updated = models.ForeignKey(User,related_name="updated")

为了推广您的方法,您可以这样做:

class BaseModel(models.Model):
    created = models.ForeignKey(User,related_name="created_%(class)s_objects")
    updated = models.ForeignKey(User,related_name="updated_%(class)s_objects")

    class Meta:
        abstract = True


class ModelOne(BaseModel):
    # your model one fields


class ModelTwo(BaseModel):
    # your model two fields
用这种方法你

  • 不需要在所有模型上明确定义相同的字段,因为您继承自
    BaseModel

  • 自动创建具有正确类名的向后关系。因此,
    user.created\u modelone\u objects.all()
    将为您提供用户创建的所有对象


要概括您的方法,您可以这样做:

class BaseModel(models.Model):
    created = models.ForeignKey(User,related_name="created_%(class)s_objects")
    updated = models.ForeignKey(User,related_name="updated_%(class)s_objects")

    class Meta:
        abstract = True


class ModelOne(BaseModel):
    # your model one fields


class ModelTwo(BaseModel):
    # your model two fields
用这种方法你

  • 不需要在所有模型上明确定义相同的字段,因为您继承自
    BaseModel

  • 自动创建具有正确类名的向后关系。因此,
    user.created\u modelone\u objects.all()
    将为您提供用户创建的所有对象


我不确定我是否理解这个问题。使用与字段同名的
相关\u名称
是多余的。如果你摆脱了它,你可能会按照你想要的方式使用它。你可以在没有“related_name”的情况下访问x.created或x.updated。@ErDmKo需要相关名称,如果没有相关名称,则不允许对同一表使用多个foreignKey。是吗?我不确定我是否理解这个问题。使用与字段同名的
相关\u名称
是多余的。如果你摆脱了它,你可能会按照你想要的方式使用它。你可以在没有“related_name”的情况下访问x.created或x.updated。@ErDmKo需要相关名称,如果没有相关名称,则不允许对同一表使用多个foreignKey。是吗?