Python Django auth.models用户一对多(1048,“列和用户id”不能为空)
我是django的新手,我的任务是让用户在登录后能够在注册后创建很多配置文件 这是my models.py:Python Django auth.models用户一对多(1048,“列和用户id”不能为空),python,mysql,django,Python,Mysql,Django,我是django的新手,我的任务是让用户在登录后能够在注册后创建很多配置文件 这是my models.py: class Profile(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) name = models.CharField(blank=False, max_length=100) lastname = models.CharField( blank=False, ma
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(blank=False, max_length=100)
lastname = models.CharField( blank=False, max_length=100)
city = models.CharField( blank=True, max_length=100)
country = models.CharField( blank=True, max_length=100)
phonenumber = models.CharField(blank=False, null=True, max_length=20)
email = models.EmailField(blank=False, max_length=100)
date_of_birth = models.DateField( blank=True, null=True)
date_of_addition = models.DateField(auto_now=True, editable=False, null=True)
当我创建我的用户时,登录并按下创建配置文件按钮,我得到:
django.db.utils.IntegrityError:(1048,“列'user\u id'不能为空”)
这是my views.py:
@login_required
def profile_create(request):
data = dict()
if request.method == 'POST':
form = ProfileForm(request.POST)
if form.is_valid():
form.save()
data['form_is_valid'] = True
profiles = Profile.objects.all()
data['html_profile_list'] = render_to_string('basic_app/users_list_1_10.html', {'profiles': profiles})
else:
data['form_is_valid'] = False
else:
form = ProfileForm()
context = {'form': form}
data['html_form'] = render_to_string('basic_app/partial_profile_create.html', context, request=request)
return JsonResponse(data)
def register(request):
registered = False
if request.method == "POST":
user_form = UserForm(data=request.POST)
if user_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
registered = True
else:
print(user_form.errors)
else:
user_form = UserForm()
return render(request,'basic_app/registration.html',{'user_form':user_form,'registered':registered})
这是我的forms.py:
from django import forms
from django.forms import ModelForm
from django.contrib.auth.models import User
from .models import Profile
class ProfileForm(ModelForm):
class Meta:
model = Profile
fields = ('name', 'lastname', 'city', 'country', 'phonenumber', 'email', 'date_of_birth')
class UserForm(ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
username = forms.CharField(help_text=False)
class Meta():
model = User
fields = ('username','password')
谢谢这是因为在您的
配置文件
模型中有用户
字段,即外键
。在Django中,默认情况下,ForeignKey
是必需的,这意味着如果不指定user
字段,就无法创建新的Profile
。但您不在配置文件表单中提供用户
您可以在ProfileForm
中提供用户,也可以通过添加以下内容将user
字段设置为非必需:
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)
在保存配置文件表单之前,我应该请求用户:
@login_required
def profile_create(request):
data = dict()
if request.method == 'POST':
form = ProfileForm(request.POST)
if form.is_valid():
add = form.save(commit=False)
add.user = request.user
add.save()
data['form_is_valid'] = True
profiles = Profile.objects.all()
data['html_profile_list'] = render_to_string('basic_app/users_list_1_10.html', {'profiles': profiles})
else:
data['form_is_valid'] = False
else:
form = ProfileForm()
context = {'form': form}
data['html_form'] = render_to_string('basic_app/partial_profile_create.html', context, request=request)
return JsonResponse(data)
卡米尔,谢谢你的关注。如果我使用user=models.ForeignKey(User,blank=True,null=True
然后我会让所有db_用户的配置文件显示在我的数据表中。但我只想显示实际登录用户的配置文件。如果我以配置文件形式提供用户,那么我猜在创建配置文件时,它将是一个带有要传递的内容的字段,但我希望它是唯一登录用户的配置文件能够创建任意数量的配置文件,这些配置文件将以一对多关系连接到他。可能我应该以配置文件形式将配置文件保存到此用户,是否可能?