Django 外键:settings.AUTH_USER_MODEL 一直为 form.save 提供空值
Django foreign keys : settings.AUTH_USER_MODEL keeps giving null for form.save
我已阅读文章并尝试在模型中实施。
user = models.ForeignKey(settings.AUTH_USER_MODEL)
但每当我尝试为用户保存表单时,它都会声明该值不能为空。我假设是因为它不是 passing/picking AUTH_USER
例如:
class Degree(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
degreeLevel = models.CharField(max_length = 50)
areaOfStudy = models.CharField(max_length = 50)
我觉得在创建用户时我需要为所有使用 user = models.ForeignKey(settings.AUTH_USER_MODEL) 的模型创建一个信号,但我正在努力寻找处理这个问题的资源从头到尾,所以我不确定我哪里错了。
任何帮助都会很棒...
这个问题涉及profiles_details.id does not exist Django
谢谢。
我试过了:
用户 = models.ForeignKey(settings.AUTH_USER_MODEL, null=False,
on_delete=models.CASCADE, verbose_name=_(u"User"))
但是当 运行 迁移 :
时收到错误消息
NameError: name '_' is not defined
如果我使用详细的名称并尝试迁移,我会得到:
此错误:
您正在尝试在没有默认值的情况下向详细信息添加不可为空的字段 'user';我们不能那样做(数据库需要一些东西来填充现有行)。
请 select 修复:
1) 现在提供一次性默认值(将在所有现有行上设置)
2)退出,让我在models.py
中添加一个默认值
也看过
https://docs.djangoproject.com/en/dev/topics/auth/customizing/#referencing-the-user-model
但不明白该怎么办:
django.contrib.auth.get_user_model().
我在你的问题中看到了几个要针对的细节:
如果您希望 user
字段不是强制性的,您应该更改为:
user = models.ForeignKey (..., null=True,...)
如果你想解决_
不被识别的问题,你应该在文件顶部添加以下导入:
from django.utils.translation import ugettext as _
如果您想在视图中填充 user
字段,可以按如下方式进行:
from django.views.generic import View
class MyView(View):
...
def get(request, *args, **kwargs):
myobject = Degree.objects.get(...) # do some query
myobject.user = request.user
myobject.save()
return ...
假设您的视图处理一个获取请求并希望将当前用户分配给对象用户。
关于如何使用:django.contrib.auth.get_user_model
这里有一个例子
from django.contrib.auth import get_user_model
...
def create_user(username, first_name, last_name, *args, **kwargs):
user_class = get_user_model()
new_user = user_class.objects.create(username=username,
first_name=first_name, last_name=last_name)
基本上,get_user_model
函数 returns 是您在 settings.AUTH_USER_MODEL
中配置的 class。例如,您可以从中访问其管理器(例如 objects
)并查询或创建新实例。
我已阅读文章并尝试在模型中实施。
user = models.ForeignKey(settings.AUTH_USER_MODEL)
但每当我尝试为用户保存表单时,它都会声明该值不能为空。我假设是因为它不是 passing/picking AUTH_USER
例如:
class Degree(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
degreeLevel = models.CharField(max_length = 50)
areaOfStudy = models.CharField(max_length = 50)
我觉得在创建用户时我需要为所有使用 user = models.ForeignKey(settings.AUTH_USER_MODEL) 的模型创建一个信号,但我正在努力寻找处理这个问题的资源从头到尾,所以我不确定我哪里错了。
任何帮助都会很棒...
这个问题涉及profiles_details.id does not exist Django
谢谢。
我试过了:
用户 = models.ForeignKey(settings.AUTH_USER_MODEL, null=False, on_delete=models.CASCADE, verbose_name=_(u"User")) 但是当 运行 迁移 :
时收到错误消息 NameError: name '_' is not defined
如果我使用详细的名称并尝试迁移,我会得到: 此错误:
您正在尝试在没有默认值的情况下向详细信息添加不可为空的字段 'user';我们不能那样做(数据库需要一些东西来填充现有行)。 请 select 修复: 1) 现在提供一次性默认值(将在所有现有行上设置) 2)退出,让我在models.py
中添加一个默认值也看过 https://docs.djangoproject.com/en/dev/topics/auth/customizing/#referencing-the-user-model
但不明白该怎么办:
django.contrib.auth.get_user_model().
我在你的问题中看到了几个要针对的细节:
如果您希望
user
字段不是强制性的,您应该更改为:user = models.ForeignKey (..., null=True,...)
如果你想解决
_
不被识别的问题,你应该在文件顶部添加以下导入:from django.utils.translation import ugettext as _
如果您想在视图中填充
user
字段,可以按如下方式进行:from django.views.generic import View class MyView(View): ... def get(request, *args, **kwargs): myobject = Degree.objects.get(...) # do some query myobject.user = request.user myobject.save() return ...
假设您的视图处理一个获取请求并希望将当前用户分配给对象用户。
关于如何使用:
django.contrib.auth.get_user_model
这里有一个例子from django.contrib.auth import get_user_model ... def create_user(username, first_name, last_name, *args, **kwargs): user_class = get_user_model() new_user = user_class.objects.create(username=username, first_name=first_name, last_name=last_name)
基本上,
get_user_model
函数 returns 是您在settings.AUTH_USER_MODEL
中配置的 class。例如,您可以从中访问其管理器(例如objects
)并查询或创建新实例。