Skip to main content
 首页 » 编程设计

python之django 不会在我的模型中存储引用为外键的 authUser

2024年11月01日41mq0036

我创建了我的模型,将 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 字段的引用,而不是对象。