You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django的ForeignKey关联auth.User时设置默认值为‘anon’

解决方法

首先,你遇到的错误翻译为:

语法错误:表达式不能包含赋值操作,或许你想用‘==’?

这个错误是因为你在anon()函数里返回的字符串包含非法赋值语句,而且ForeignKey的default参数不接受这类字符串值——它需要的是User模型的实例、用户的主键ID,或是能返回这两者之一的可调用对象。

正确实现方式如下:

  1. 修正anon()函数,通过查询或创建用户名为"Anon"的用户,返回该用户对象作为默认值:
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User

def anon():
    # 获取或创建Anon用户,避免重复生成
    user, created = User.objects.get_or_create(username="Anon")
    return user

class Post(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(
        User, 
        on_delete=models.CASCADE, 
        default=anon  # 传入可调用函数,Django会自动执行获取默认值
    )
    
    body = models.TextField()
    
    def __str__(self):
        return self.title
    
    def get_absolute_url(self):
        return reverse("post_detail", kwargs={"pk": self.pk})
  1. 若希望允许手动留空author字段(后续补充),可给ForeignKey添加blank=True, null=True参数,同时保留默认值逻辑:
author = models.ForeignKey(
    User, 
    on_delete=models.CASCADE, 
    default=anon,
    blank=True,
    null=True
)
  1. 执行迁移命令:
    依次运行python manage.py makemigrations和python manage.py migrate,Django会自动创建Anon用户(若不存在),并将其作为新文章的默认作者。

注意事项:

  • 直接导入django.contrib.auth.models.User比字符串引用更直观,避免模型解析问题。
  • 使用get_or_create可防止重复创建Anon用户,保证默认作者唯一。

内容的提问来源于stack exchange,提问作者KA RL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 14:45:08