Django外键:settings.AUTH_USER_MODEL为form.save保持null

时间:2015-10-27 16:34:57

标签: django postgresql django-models django-forms

我阅读了文章,并尝试在模型中实施。

user = models.ForeignKey(settings.AUTH_USER_MODEL) 

但每当我尝试为用户保存表单时,它都声明该值不能为空。我假设因为它没有通过/拿起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

有关

谢谢。

我试过了:

user = models.ForeignKey(settings.AUTH_USER_MODEL,null = False,        on_delete = models.CASCADE,verbose_name = _(u" User")) 但是在运行以下迁移时收到错误消息:

 NameError: name '_' is not defined

如果我采用详细的名称并尝试迁移我得到: 这个错误:

您正在尝试添加一个不可为空的字段' user'没有默认的细节;我们不能这样做(数据库需要一些东西来填充现有的行)。 请选择一个修复:  1)现在提供一次性默认值(将在所有现有行上设置)  2)退出,让我在models.py

中添加默认值

还看着 https://docs.djangoproject.com/en/dev/topics/auth/customizing/#referencing-the-user-model

但不明白该怎么做:

 django.contrib.auth.get_user_model().

1 个答案:

答案 0 :(得分:1)

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

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

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

  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函数会返回您在settings.AUTH_USER_MODEL中配置的类。例如,您可以访问其管理员(例如objects)并查询或创建新实例。