Python Django auth.models用户一对多(1048,“列和用户id”不能为空)

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

我是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, 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_用户的配置文件显示在我的数据表中。但我只想显示实际登录用户的配置文件。如果我以配置文件形式提供用户,那么我猜在创建配置文件时,它将是一个带有要传递的内容的字段,但我希望它是唯一登录用户的配置文件能够创建任意数量的配置文件,这些配置文件将以一对多关系连接到他。可能我应该以配置文件形式将配置文件保存到此用户,是否可能?