如何向Django用户模型中插入数据?

2024-10-01 15:39:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个UserProfile模型,它与Django用户模型有一对一的关系。在

我想通过视图AddStory将数据插入到UserProfile模型中,但是我得到了IntegrityError at /AddStory/ NOT NULL constraint failed: portal_userprofile.user_id

更具体地说,我想通过主页上给出的表单向UserProfile模型的ShoppingHistory属性添加一些文本。我有另一个页面列出了ShoppingHistory.html上这个属性的值(如果用户给出的话)。在

所有用户都是唯一的,我如何确保为特定用户添加此属性,一旦该用户已登录?用户登录后,如何引用?在

模型.py

from django.db import models
from django.contrib.auth.models import AbstractUser
class UserProfile(AbstractUser):      
    profile_pic = models.ImageField(upload_to='profile_images', blank=True)
    StaffMember = models.BooleanField(default=False)
    ShoppingHistory = models.TextField()
    ShoppingWishList = models.TextField()

    def __unicode__(self):
        return self.user.username

视图.py:

^{pr2}$

主页.html:

    {% if user.is_authenticated %}
    <p> WELCOME, thanks for logging in {{user.username}} </p>
    <form id="user_form" method="post" action="/AddStory/" enctype="multipart/form-data">      
        {% csrf_token %}
    <input type="text" name="ShoppingHistory" value="" />
    <input  name="username" value="{{user.username}}" DISABLED />
    <input type="submit" name="submit" value="Add Story" />

    {% endif %}

购物历史.html:

  {% if user.is_authenticated %}
        {% csrf_token %}

    <p> WELCOME, thanks for logging in {{user.username}} </p>
    <p> Your Shopping Stories: </p>
    <p>{{user.ShoppingHistory}}</p>

    {% endif %}

表单.py

from django import forms
from portal.models import UserProfile
class UserProfileForm(forms.ModelForm):

    password = forms.CharField(widget=forms.PasswordInput())

class Meta:
    model = UserProfile
    fields = ('username', 'first_name', 'last_name', 'email', 'password', 'profile_pic')

Tags: 用户namefrompy模型import属性models
1条回答
网友
1楼 · 发布于 2024-10-01 15:39:11

使用AbstractUser创建自定义用户会更好:

from django.contrib.auth.models import AbstractUser


class UserProfile(AbstractUser):
    pass

您的问题是,当您创建一个userprofile实例时,您必须将User设置为它,但实际上您想要创建它,所以您需要首先创建一个用户,然后必须在DB中使用用户表。为什么?在

有关自定义用户的详细信息:docs

更新:

错误在这一行p=models.UserProfile(ShoppingHistory='story',)。您的UserProfile模型要求用户创建一个UserProfile,而您不设置用户实例。但我想说的是,你创建自定义用户的方法是错误的。其思想是在数据库中有两个user表。一个用于用户,另一个用于UserProfile。他们是通过单一的关系联系在一起的,但这不是遗传。无论何时要创建UserProfile实例,都需要为其创建一个用户实例。这就是为什么我绝对推荐您使用AbstractUser来创建一个定制的用户模型。那么在创建用户时就不需要考虑指定用户。在

更新2

如果你想为他创建一个故事,你不需要创建一个新用户。您可以:

^{pr2}$

相关问题 更多 >

    热门问题