在上传文件的情况下,Django NOT NULL约束使userprofile.user_id失败

Mii*_*ind 5 python django

我是Django的新手,试图练习一个用户注册的简单项目(使用django registration-redux),上传一些文件然后他/她提供了她的文件列表,可以下载.这是我的models.py,forms.py和views:

models.py

class UserProfile(models.Model):
    user = models.ForeignKey(User, related_name='uploaded_by')
    names = models.CharField(max_length=40)
    lastname = models.CharField(max_length=50)
    email = models.EmailField()
    uploads = models.FileField(upload_to= 'blablabla')

    def __str__(self):
        return self.email
Run Code Online (Sandbox Code Playgroud)

forms.py

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ['names', 'uploads']
Run Code Online (Sandbox Code Playgroud)

view.py

from .forms import UserProfileForm
from .models import UserProfile
@login_required()
def new(requst):
    form = UserProfileForm(requst.POST or None, requst.FILES or None)
    if form.is_valid():
        form.save()
    context = {'title': 'welcome', 'form': form}
    return render(requst, 'upform.html', context)
Run Code Online (Sandbox Code Playgroud)

但是当我向用户登录并尝试上传文件时,我收到错误:/ new NOT NULL约束中的IntegrityError失败:_userprofile.user_id

在挖掘了很多之后我注意到有人提出错误的原因是因为在发布表单的过程中无论如何都没有包含用户,所以我尝试了任何想到的内容和我在表单中添加用户字段的情况.py工作:

forms.py

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ['names', 'uploads']
Run Code Online (Sandbox Code Playgroud)

但问题是浏览器中显示的表单现在包含一个包含所有注册用户的下拉列表.我试图通过持续看到不同的错误将登录用户与视图中的表单相关联.我的问题是:如何以透明的方式将上传与登录用户相关联.对不起,如果问题太新手了

Dan*_*man 11

让用户远离表单并在保存时添加它:

if form.is_valid():
    profile = form.save(commit=False)
    profile.user = request.user
    profile.save()
Run Code Online (Sandbox Code Playgroud)

我必须说你的模型看起来有点奇怪; 每个用户都有多个配置文件,每个配置文件只需一次上传.与使用ForeignKey到UserProfile的单独的Uploads模型相比,您似乎更希望拥有与User的OneToOne关系的单个配置文件.