python - Django NOT NULL 约束在上传文件时失败 userprofile.user_id

标签 python django

我正在尝试练习一个简单的项目:用户注册(使用 Django registration-redux),上传一些文件,然后她/他会得到一个文件列表,可以下载.下面分别是我的 models.py、forms.py 和 View :

模型.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

表单.py

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ['names', 'uploads']

view.py

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

然而,当我以用户身份登录并尝试上传文件时,出现错误:IntegrityError at/new NOT NULL 约束失败:_userprofile.user_id

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

表单.py

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ['names', 'uploads']

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

最佳答案

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

if form.is_valid():
    profile = form.save(commit=False)
    profile.user = request.user
    profile.save()

我必须说你的模型看起来有点奇怪;每个用户都有多个配置文件,每个配置文件都有一个上传。您似乎更需要一个与用户具有 OneToOne 关系的单个配置文件,而不是具有到 UserProfile 的外键的单独上传模型。

关于python - Django NOT NULL 约束在上传文件时失败 userprofile.user_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32942529/

相关文章:

python - 通过 Python 发送电子邮件的程序以 "AttributeError: ' str 退出'对象没有属性 'get_content_maintype''"

python - 如何在 Python 中捕获特定的 HTTP 错误?

javascript - 加载 10 个以上项目的 AJAX 调用无法按预期工作

Django Rest Framework 缺少 Bootstrap

django - Django "app"应该是什么意思?

python - 使用正则表达式在 Python 中将 'nnn0n' 替换为 'nnn1n'

python - 使用 Python os.system 将 MySQL 数据库导出到 sql 文件

python - 如何将以下三角函数转换为python函数进行边界曲率计算?

django - 使用 django-allauth 注册多用户类型

Django 自定义按钮计数器