我想创建一个项目,我需要上传一个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匹配查询不存在,但在accountuser中,我可以看到用户的注册,并且使用上面提到的打印命令,我看到id为1,用户的电子邮件。我试着写下一个命令user=AccountUser.objects.filter(contact_user = userId)
,它给了我这个不能分配" " QuerySet []>";ContactUser.user"必须是"AccountUser"实例。
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)
解决这个问题