我创建了我的模型,将 authUser 引用为外键,然后使用 django Form API 我试图将数据存储到我的数据库中,但我的用户字段仍然为空。
我使用内置的 FORM API 来接收上传的文件,在存储我的文件之前,我还存储了文件名。我试图对 userField 做同样的事情,但 django 抛出 ValueError。
Models.py
class sample(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True ,default=1)
submit_time = models.DateTimeField(auto_now=True)
file_name = models.CharField(max_length=1024)
score = models.FloatField(default=0.0)
is_pending = models.BooleanField(default=True)
is_complete = models.BooleanField(default=False)
json_URL = models.FilePathField()
sample = models.FileField(upload_to='samples/')
Views.py
@login_required
def upload(request):
if request.method == 'POST':
file = request.FILES['sample']
form = SampleForm(request.POST, request.FILES)
if form.is_valid():
new_sample = form.save(commit=False)
new_sample.file_name = file.name
new_sample.user = User.id #throws ValueError Cannot assign "sample.user" must be a "User" instance.
form.save()
return redirect('reports')
else:
print("form is invalid")
else:
form = SampleForm()
if request.method == 'GET':
return render(request, 'upload2.html', {'form': form})
forms.py
class SampleForm(forms.ModelForm):
class Meta:
model =sample
fields=('sample',)
我的目标是将用户 ID 保存在我的数据库中,以便我知道是谁上传了文件。
请您参考如下方法:
您应该使用 request.user 到 new_sample.user 对象,或 request.user.id(或 request. user.pk) 到 request.user_id 属性,例如:
# …
new_sample = form.save(commit=False)
new_sample.file_name = file.name
new_sample.user = <b>request.user</b>
form.save()
return redirect('reports')
# …
通过使用 User.id,您可以获得对 User model 字段的引用,而不是对象。
