如何预填充Django模型

时间:2019-06-05 22:44:30

标签: django django-models

赞:

class Article (models.Model):
    user = models.ForeignKey('User', related_name="articles")

    def __init___(self):
        self.user = 'Friendy'

1 个答案:

答案 0 :(得分:0)

假设您要在user字段中添加默认值,有两种方法:基于简单值的默认值,或者可以使用callable作为默认值。可以在https://docs.djangoproject.com/en/2.2/ref/models/fields/#default

上找到此文档

如果要默认使用特定用户,则需要知道该用户的id,如下所示:

class Article (models.Model):
    user = models.ForeignKey(
        'User', 
        related_name="articles", 
        default=1, 
        help_text="There better be a user with an id of 1 or this will not work",
    )

    def __init___(self):
        self.user = 'Friendy'

另一种方法是定义一个可返回用户ID的可调用对象,如下所示:

def get_first_user():
    user = User.objects.first()
    if user:
        return user.pk
    return None

class Article (models.Model):
    user = models.ForeignKey(
        'User', 
        related_name="articles", 
        default=get_first_user, 
        help_text="There better be a user with an id of 1 or this will not work",
    )

    def __init___(self):
        self.user = 'Friendy'

我们返回ID而不是User实例的原因是因为docs中的这一行:

  

对于诸如ForeignKey之类的映射到模型实例的字段,默认值应该是它们引用的字段的值(除非设置了to_field,否则为pk)而不是模型实例。