【问题标题】:How do I set a default user for blog posts in Django?如何在 Django 中为博客文章设置默认用户?
【发布时间】:2021-08-03 15:04:17
【问题描述】:

我的博客模型有一个用户字段,如下所示:

from django.contrib.auth.models import User

class Blog:
    author = models.ForeignKey(User, on_delete = models.CASCADE, related_name='blog', default=User('monty'))

当我创建博客文章时,我可以在管理界面中看到“monty”设置为默认用户。但是,当我进行迁移时,出现以下错误:

ValueError: Cannot serialize: <User: >
There are some values Django cannot serialize into migration files.

我也试过这个:

default=User.objects.filter(username='monty'))

当我进行迁移时会返回一个稍微不同的错误:

ValueError: Cannot serialize: <User: monty>
There are some values Django cannot serialize into migration files.

有谁知道如何克服这个错误?

【问题讨论】:

    标签: django model migration


    【解决方案1】:

    您可以创建一个确定User 对象的可调用对象,因此:

    from django.conf import settings
    from django.contrib.auth import get_user_model
    
    def get_monty():
        if get_monty.user:
            return user
        user, __ = get_user_model().get_or_create(username='monty')
        get_monty.user = user
        return user
        
    get_monty.user = None
    
    class Blog(models.Model):
        author = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.CASCADE,
            related_name='blog',
            default=get_monty
        )

    话虽如此,我认为在这里指定默认值是没有意义的。您的视图可以确定登录用户并将其设置为作者。通过使用默认值,您最终可能会得到一些 Posts 视图没有为其实现逻辑,因此全部分配给 monty,它 因此将消除一个可能不应该消除的错误。


    注意:通常使用settings.AUTH_USER_MODEL [Django-doc] 引用用户模型比直接使用User model [Django-doc] 更好。更多信息可以查看referencing the User model section of the documentation

    【讨论】:

      猜你喜欢
      • 2016-05-18
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 2023-02-18
      • 2019-03-25
      相关资源
      最近更新 更多