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().

我在你的问题中看到了几个要针对的细节:

  1. 如果您希望 user 字段不是强制性的,您应该更改为:

     user = models.ForeignKey (..., null=True,...)
    
  2. 如果你想解决_不被识别的问题,你应该在文件顶部添加以下导入:

      from django.utils.translation import ugettext as _
    
  3. 如果您想在视图中填充 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 ...
    

    假设您的视图处理一个获取请求并希望将当前用户分配给对象用户。

  4. 关于如何使用: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)并查询或创建新实例。