【问题标题】:Django mapping user to modelDjango 将用户映射到模型
【发布时间】:2018-10-22 19:58:59
【问题描述】:

在 Django 1.9 上,我可以通过用户表单视图创建用户。当用户提交表单以创建配置文件时,可以在Users 下的管理员中看到提交并正常登录。我希望用户只能查看他们上传的模型。因此,我需要将它们映射在一起。但是models.py中没有定义用户模型。

我试图在我的模型中将它们链接到models.py

user = models.ForeignKey(User)

但是,这个错误被抛出:

NameError: name 'User' is not defined

这是因为我的models.py 中没有用户作为模型吗?

创建用户的请求:

def post (self, request):
    form = self.form_class(request.POST)

    if form.is_valid():
        #creates an object from the form
        #being stored locally as of now
        user = form.save(commit=False)

        #cleaned data
        username = form.cleaned_data['username']
        password = form.cleaned_data['password']
        user.set_password(password)
        #Saved to the DB after it's shown in the correct format
        user.save()

models.py:

class Clean(models.Model):
    name = models.CharField(max_length=100, blank = False)
    #User doesn't see when creating model
    cv = models.TextField(max_length=10000, blank = True, null = True)
    cvfile = models.FileField(validators=[validate_file_extension])
    #User doesn't se when creating model
    cvscore = models.IntegerField()
    spellerrors = models.CharField(max_length=100, blank = False)

    *** user = models.ForeignKey(User) ***

任何解决方案都将不胜感激。我正在使用 Python 3.6.4。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    您可能缺少import 语句,但是,直接引用User 通常不是一个好主意,因为以后,您可能会更改用于用户的模型。

    就像documentation 所说,您应该使用AUTH_USER_MODEL 设置:

    from django.conf import settings
    from django.db import models
    
    class SomeModel(models.Model):
    
        user = models.ForeignKey(settings.AUTH_USER_MODEL)

    【讨论】:

    • 是的,这是一个导入错误。谢谢你。我假设我可以通过以下方式限制可见性: cvs = Clean.objects.filter(user=request.user) ?
    • @Yunter:确实,除非你当然做了太多的魔法,但没有太多奇怪的设置,这个过滤器应该可以工作。
    • 谢谢。我已经勾选了你的答案。有我需要的进口请求吗?
    • @Yunter:不,请求通常是视图中的参数。
    【解决方案2】:

    如果你想使用auth.User,你应该从django导入它

    from django.contrib.auth.models import User
    
    class Clean(models.Model):
        user = models.ForeignKey(User)
    

    或者,像 Django 应用程序 auth 中的 string 一样使用它

    user = models.ForeignKey('auth.User')
    

    【讨论】:

    • 谢谢。我忘了添加导入。
    猜你喜欢
    • 2017-10-12
    • 2014-12-27
    • 2011-09-15
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多