匹配查询不 exist/cannot 分配“<QuerySet []>” - 上传 csv 文件 - django

Matching query does not exist/cannot assign "<QuerySet []>" - Uploading a csv file - django

我想创建一个项目,我需要向用户上传一个 csv 文件,但由于某种原因,它没有正确加载(正在为第一个创建的用户上传,我尝试从其他帐户执行此操作).

在我看来,我有这样的事情:

def FileViewUpload(request):  
        form = CsvFileForm(request.POST, request.FILES)
        print(request.user)
        userId = request.user.id
        print(userId)
        print(request.user.email)

        if form.is_valid():
            form.save()
            form = CsvFileForm()

            obj= CsvFileModel.objects.get(activated=False)
            with open(obj.file_name.path, 'r') as f:
                reader = csv.reader(f)

                for i, row in enumerate(reader):
                    if i==0: 
                        pass
                    else: 
                        date = row[0]
                        user = AccountUser.objects.get(contact_user = userId)
                        print(user)
                        ContactUser.objects.create(
                            date=date,
                            message= row[1]
                            user=user,
                        )
                obj.activated=True
                obj.save()
        return render(request, 'uploadFile.html', {
        'importFile': form
    })

对于这一行:

print(request.user)
print(userId)
print(request.user.email)

它显示了好东西,特定用户的正确 ID 和电子邮件。但是当我按下上传按钮时,它正在为第一个创建的用户加载。

问题,我认为是在这一行:user = AccountUser.objects.get(contact_user = userId),但我不知道为什么,如果在开始时,在第一次打印时,它显示正确。

ContactUser 的模型:

class ContactUser(models.Model):
    user = models.ForeignKey(AccountUser, related_name='contact_user', on_delete=models.CASCADE)
    date = models.CharField()
    message = models.CharField()

    def __str__(self):
        return f"{self.user}"

编辑 - 简短更新

我认为我无法以这种方式访问​​创建的用户。我删除所有迁移,我 运行 迁移命令并创建用户。当我想导入文档时,它给了我这个 AccountUser 匹配查询不存在,但是在 AcccountUser 中,我可以看到用户的注册,以及打印命令上面提到,我看到id是1,用户邮箱。我尝试编写下一个命令 user=AccountUser.objects.filter(contact_user = userId),它给了我这个 Cannot assign "": "ContactUser.user" must be a "AccountUser" instance.

行:

user = AccountUser.objects.get(contact_user = userId)

是 运行 对每一行一遍又一遍,但它不会为每一行改变。您的意思是从 CSV 中的行中获取 ID 吗?您在当前发出请求的用户的循环之前设置 userId

我怀疑您的目标如下(行 [0] 将取决于您是否在 csv 文件中有 id - 这是我的假设,在 csv 的第一列中):

user = AccountUser.objects.get(contact_user__user_id = row[0])

我使用 user = AccountUser.objects.get(id = userId)

解决了这个问题