如何从扩展用户模型中检索数据

卡皮尔马塔尼

我正在尝试通过 django 制作一个简单的注册/登录页面。我使用了 UserCreationForm 并使用了模型 UserProfile 来扩展用户模型。我想在用户登录后检索从表单 ie 部门发布的数据。我是 django 的新手,因此我们将不胜感激。提前致谢

表格.py

from django import forms
from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.models import User
from mysite.core.models import UserProfile
from django.db import models

class SignUpForm(UserCreationForm):
    first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
    department = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email','password1', 'password2', 'department',)

    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super(SignUpForm, self).save(commit=False)
        user_profile = UserProfile(user=user, department=self.cleaned_data['department'])
        user.save()
        user_profile.save()
        return user, user_profile

视图.py

from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate
from django.shortcuts import render, redirect
from mysite.core.forms import SignUpForm

@login_required
def home(request):
    return render(request, 'home.html')

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user,user_profile = form.save(commit=False)
            username = user.cleaned_data.get('username')
            raw_password = user.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('home')
    else:
        form = SignUpForm()
    return render(request, 'signup.html', {'form': form})

模型.py

from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,unique=True)
    department = models.CharField(max_length=500, blank=True)

模板中的 home.html:

{% extends 'base.html' %}
{% block content %}
<h2>Welcome, <small>{{ user.username }}</small>!</h2>
<p>Your email address: {{ user.email }}</p>
<p>Department: {{ user_profile.department }}</p>
{% endblock %}

我可以打印用户名和电子邮件,但部门空了。

丹尼尔罗斯曼

首先,你有错误的关系。User 和 UserProfile 之间是一对一的关系;一个用户只能有一个配置文件,一个配置文件只能属于一个用户。你现在拥有的方式,一个用户可以有很多个人资料,这是没有意义的。

您应该用 OneToOneField 替换 ForeignKey。

完成此操作后,您将能够通过关系访问配置文件数据:user.userprofile.department等等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Meteor中扩展用户模型?

如何在Django Serializer中按用户ID检索所有模型数据?

Django:如何从模型中检索特定用户的特定项目?

在Laravel中,如何从“用户”表中检索随机的user_id以进行模型工厂种子数据生成?

如何通过模型检索数据?

如何从模型类型检索数据?

Django基于类的视图:如何使用用户名而不是ID从扩展模型中获取数据

如何从JTable单元中检索数据而不是从表模型中检索数据?

在MVC中,如何从作为对象存储在其超级模型中的模型中检索数据?

如何使用节点js从mongodb中检索用户全部数据

如何从uid存储的firebase中检索用户数据

如何从特定用户的数据库中检索值?

如何使用我在此面板中创建的用户登录到 Django 管理面板?扩展了用户模型

LoopBack:如何创建扩展的用户模型关系

如何访问 Django Rest Framework 中扩展用户模型的序列化程序中的用户模型字段?

在Django中扩展默认用户模型

如何从firebase flutter获取用户模型类中的数据

如何使用扩展类表检索数据?

如何首先使用实体框架数据库检索模型中的导航数据

如何不要求超级用户扩展用户模型字段

对于与用户uid相同的文档ID,如何从Firestore中仅检索一个用户的数据?

Django:如何更新用户扩展模型中的特定字段?

如何检索仅属于指定用户的数据?

如何从Twitter检索任何用户的数据

组织模型扩展了用户模型

Django扩展用户模型

仅在 DRF 中检索当前用户的数据

为员工扩展了Django用户模型。如何访问模型管理员的change_form中的employee属性?

如何创建过程从具有用户插入数据的三个表中检索数据