У меня есть модель UserProfile, которая имеет отношения «один к одному» с пользовательской моделью Django.Как вставить данные в пользовательскую модель Django?
Я хотел бы вставить данные в модель UserProfile через зрение AddStory
, но я получаю IntegrityError at /AddStory/ NOT NULL constraint failed: portal_userprofile.user_id
Более конкретно, я хочу, чтобы добавить текст в ShoppingHistory атрибут модели UserProfile через форму заданную на домашняя страница. У меня есть другая страница, в которой указано значение этого атрибута (если задано пользователем) на ShoppingHistory.html
.
Все пользователи уникальны, как я могу обеспечить, чтобы этот атрибут был добавлен для конкретного пользователя, как только этот пользователь вошел в систему? Как мне обратиться к пользователю после его входа в систему?
models.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
views.py:
from django.shortcuts import render
from django import forms
from portal import models
from portal.forms import UserProfileForm
from django.contrib.auth import authenticate, login
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth.decorators import login_required
# Create your views here.
def register(request):
regStatus = False
if request.method == 'POST':
#grab info from raw information
profile_form=UserProfileForm(data=request.POST)
if profile_form.is_valid():
user=profile_form.save(commit=False)
#hash the password for security using the djangohash default method
user.set_password(user.password)
if 'profile_pic' in request.FILES:
profile_pic = request.FILES['profile_pic']
user.save()
regStatus = True
else:
print profile_form.errors
else:
profile_form = UserProfileForm()
return render(request, 'register.html', {'profile_form': profile_form, 'registered': regStatus})
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
login(request, user)
return HttpResponseRedirect('/home/')
else:
return HttpResponse('Invalid login credentials')
else:
return render(request, 'login.html', {})
@login_required
def homepage(request):
return render(request, 'home.html', {})
def AddStory(request):
if request.method == 'POST':
story = request.POST.get('ShoppingHistory')
username = request.POST.get('username')
p=models.UserProfile(ShoppingHistory=story, username=username)
p.save()
return render(request, 'ShoppingHistory.html', {'story': p})
return render(request, 'ShoppingHistory.html', {})
home.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 %}
ShoppingHistory.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 %}
forms.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')
Да, я создал пользователя.Я отредактировал свой вопрос соответственно. У меня есть пользовательские таблицы. Я хочу добавить детали для атрибута ShoppingHistory через форму HTML или форму django. @pythad, пожалуйста, см. правки – thematroids
@thematroids, ошибка в этой строке 'p = models.UserProfile (ShoppingHistory = 'story',)' – pythad
Я пробовал 'p = models.UserProfile (ShoppingHistory = 'story')', но я get 'NOT NULL constraint failed failed: portal_userprofile.user_id'. Какой правильный синтаксис для вставки этих данных? – thematroids