当前位置: 首页 > 知识库问答 >
问题:

PYTHON/DJANGO:"SUser.user"必须是"User"实例

戚建华
2023-03-14

我在向数据库添加新的自定义用户时遇到问题。我知道网上有一些关于这个问题的帖子,但我找不到解决问题的办法。点击注册页面中的“提交”按钮后,这里是哪个模板:

{% extends 'strona/Main.html' %}
{% block body %}
< form action="" method="post" enctype="multipart/form-data" >
    {% csrf_token %}
    {% for field in form %}
        {{ field.label_tag }}
        < /br >
        {{ field }}
        < /br >
        < /br >
    {% endfor %}
    < button type="submit" class="btn btn-success">Submit</button >
< /form >
{% endblock %}

它一直说:“无法分配”

源代码:

观点。巴拉圭

class RegPanelView(View):
panel = RegPanel
template_name = 'strona/RegistrationTemp.html'
registration = None

def get(self, request):
    form = self.panel(None)
    return render(request, self.template_name, {'form': form})

def post(self, request):
    # form = self.panel(data=request.POST)
    form = self.panel(request.POST)

    if form.is_valid():
        # user = form.save(commit=False)

        # username = form.cleaned_data['username']
        password1 = form.cleaned_data['password1']
        password2 = form.cleaned_data['password2']

        if password1 == password2:

            newuser = form.save(commit=False)
            newuser.user = request.user
            newuser.save()

            return redirect('strona:index')
    return render(request, self.template_name, {'form': form})

模特。巴拉圭

class SUser(models.Model):
# User = user_model()
user = models.OneToOneField(User, on_delete=models.CASCADE)
username = models.CharField(max_length=200)
# last_login = models.DateTimeField(blank=True)
# is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
relations = models.ManyToManyField('self')
# is_anonymous = False
# is_authenticated = True

USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ('', )

表单.PY

class RegPanel(UserCreationForm):

# password = forms.CharField(max_length=16, widget=forms.PasswordInput)
# first_name = forms.CharField(max_length=100, required=False)
# last_name = forms.CharField(max_length=100, required=False)
# is_staff = forms.BooleanField(required=False)

# birthday = forms.DateField(required=False)

class Meta:
    model = SUser
    fields = ['username', 'is_staff', 'first_name', 'last_name']





def save(self, commit=True):
    user = super(UserCreationForm, self).save(commit=False)
    # user.set_password(self.cleaned_data["passwosrd1"])
    if commit:



        user.set_password(self.cleaned_data["password1"])
        user.save()
        # if commit:
        # user.save()

    return user

设置。.PY:

AUTH_USER_MODEL = 'auth.User'

编辑

完全错误跟踪:

文件"C:\用户\Dawid\AppData\本地\程序\Python\Python35-32\lib\site-包\django-1.10.3-py3.5.egg\django\core\handler\exception.py"在内部39.响应=get_response(请求)

文件"C:\用户\Dawid\AppData\本地\程序\Python\Python35-32\lib\site-包\django-1.10.3-py3.5.egg\django\core\handler\base.py"在_get_response187。响应=self.process_exception_by_middleware(e,请求)

文件“C:\ Users \ Dawid \ AppData \ Local \ Programs \ Python \ Python 35-32 \ lib \ site-packages \ django-1 . 10 . 3-py 3.5 . egg \ django \ core \ handlers \ base . py”in _ get _ response 185。response = wrapped _ callback(request,*callback_args,**callback_kwargs)

文件"C:\用户\Dawid\AppData\本地\程序\Python\Python35-32\lib\site-包\django-1.10.3-py3.5.egg\django\view\通用\base.py"在视图68.返回self.dispatch(请求,参数,**kwargs)

在调度88中文件“C:\用户\Dawid\AppData\本地\程序\Python\Python35-32\lib\site-包\django-1.10.3-py3.5.egg\django\view\通用\base.py”。返回处理程序(请求,参数,**kwargs)

文件“C:\Users\Dawid\PycharmProjects\Zadanie\strona\views.py”在帖子 97.新用户 = 请求用户

文件“C:\Users\Dawid\AppData\Local\Programs\Python\Python35-32\lib\site packages\django-1.10.3-py3.5.egg\django\db\models\fields\related_descriptors.py”位于set 211.self.field.remote_field.model._meta.object_name中,

异常类型:ValueError位于/index/register/异常值:无法赋值“

有人能帮我吗?诚挚的问候。

共有1个答案

施茂
2023-03-14

Django延迟加载request.user,以便它可以是UserAnnamousUser,具体取决于身份验证状态。

if request.user.is_authenticated(): #then request.user will be `User` instance
    newuser = form.save(commit=False)
    newuser.user = request.user
    newuser.save()
 类似资料:
  • 我在django rest auth中使用自定义寄存器序列化程序来添加注册时的新字段。 我在用户模型中有一个国家/地区模型和一个国家/地区字段,它是国家/地区的FK。 user.models user.serializers 自定义寄存器序列化器 以国家/地区为对象从客户端发送的示例数据 {用户名:“伯尼”,电子邮件:bernie@d.com,国家:{…},密码1:“密码”,密码2:“密码”} 但

  • 我一直在尝试创建一个django项目,该项目拥有用户,并且这些用户可以添加他们创建的书籍的标题。但每次我输入书名(不在管理页面上)时,我都会出现这个错误 models.py

  • 问题内容: 刚收到我的一张表格中的Sentry错误。我知道它与Django 1.11有关,但是我不确定要进行哪些更改以修复它。 违规线 整个视图 问题答案: 在Django 1.8+中 ,模板的方法采用参数的字典。不赞成通过实例,在Django 1.10+中给出了错误。 在您的情况下,只需使用常规而不是实例即可: 您可能更喜欢使用快捷方式: 如果您使用而不是,那么您也将传递给这些方法,以便上下文处

  • 从django分配用户对象的正确方法是什么。contrib。auth。模型视图中的模型对象是否具有对用户的外键引用?新联系人示例如下: “new_contact.user=request.user”在/无法分配“”时抛出错误值error:“contact.user”必须是“user”实例,因为请求。用户是一个对象包装器,而不是实际用户(它还不存在)。但如果我建立新的联系。user=auth。get

  • 我无法理解Stackoverflow中的其他问题。当圆圈向屏幕末端移动时,它会向相反方向移动。 发出错误消息而未执行。 screen.blit(圆圈,[x,y]) 类型错误:参数1必须是pygame.Surface,而不是pygame.Rect 有什么问题吗?

  • 问题内容: 有人在说我必须实施OnFragmentInteractionListener,这是一个错误,但是据我所知我正确地实现了它。任何帮助将不胜感激。 主要活动 导航片段 内容片段 错误 问题答案: 两者中的接口都包含一个具有相同签名的方法,并且正在实现一种方法来尝试覆盖这两个接口。 更改一个或两个方法的签名,然后在中实现两个方法。例如: 导航片段 内容片段 主要活动