【发布时间】:2022-01-23 04:45:36
【问题描述】:
IntegrityError at /
NOT NULL constraint failed: pages_profile.username
Request Method: POST
Request URL: http://127.0.0.1:8000/
Django Version: 3.2.9
Exception Type: IntegrityError
Exception Value:
NOT NULL constraint failed: pages_profile.username
如何使用已登录的表单从发布请求中更新 abstractuser?
from django.shortcuts import redirect, render
from .forms import UserProfileForm
from .models import Profile
def index(request):
context = {}
if request.method == "POST":
print(request.POST)
form = UserProfileForm(request.POST, request.FILES)
if form.is_valid():
img = form.cleaned_data.get("avatar")
obj, created = Profile.objects.update_or_create(
username=form.cleaned_data.get('username'),
defaults={'avatar': img},
)
obj.save()
print(obj)
return redirect('home')
else:
form = UserProfileForm()
context['form']= form
return render(request, "home.html", context)
urls.py
from django.urls import path
from pages.views import index
urlpatterns = [
path('', index, name='home'),
]
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class Profile(AbstractUser):
avatar = models.ImageField(default='default.png', upload_to='',null=True, blank=True )
forms.py
from django import forms
from django.core.files.images import get_image_dimensions
from pages.models import Profile
class UserProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('avatar',)
【问题讨论】:
-
你能检查一下你的
username是否是从前端发送的。 -
什么意思?
-
NOT NULL constraint failed: pages_profile.username表示您正在尝试发送空值。 -
我该如何检查?
-
你不用检查,它告诉你用户名是空的。您可以打印
form.cleaned_data以查看实际收到的内容。