Python Django使用用户名在数据库中保存文件

Python Django使用用户名在数据库中保存文件,python,django,Python,Django,我从用户处获得多个文件条目。我一次就把所有这些都保存在数据库里 但我不希望当多个用户使用该系统时,这些文件混淆在一起。因此,当我保存每个文件时,我希望将上载该文件的用户名保存在数据库中 型号.py class users(models.Model): person_name = models.CharField(max_length=50, null=False, blank=True, verbose_name="name") person_surname

我从用户处获得多个文件条目。我一次就把所有这些都保存在数据库里

但我不希望当多个用户使用该系统时,这些文件混淆在一起。因此,当我保存每个文件时,我希望将上载该文件的用户名保存在数据库中

型号.py

class users(models.Model):
    person_name = models.CharField(max_length=50, null=False, blank=True, verbose_name="name")
    person_surname = models.CharField(max_length=50, null=False, blank=True, verbose_name="surname")
    email = models.CharField(max_length=100, null=False, blank=True, verbose_name='email')
    user_name = models.CharField(max_length=30, null=False, blank=True, verbose_name="username")
    user_password = models.CharField(max_length=35, null=False, blank=True, verbose_name="password")


class files(models.Model):
    owner= models.OneToOneField(User, unique=True, related_name="owner", on_delete=models.CASCADE)

    description = models.CharField(max_length=255, blank=True)

    excelFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)

    wordFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)
    
    txtEmailFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)
     
    txtContentFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)

    attachmentFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)
class DocumentForm(forms.ModelForm):
    class Meta:
        model = files
        fields = ('description', 'excelFile', 'wordFile', 'txtEmailFile', 'txtContentFile', 'attachmentFile')
forms.py

class users(models.Model):
    person_name = models.CharField(max_length=50, null=False, blank=True, verbose_name="name")
    person_surname = models.CharField(max_length=50, null=False, blank=True, verbose_name="surname")
    email = models.CharField(max_length=100, null=False, blank=True, verbose_name='email')
    user_name = models.CharField(max_length=30, null=False, blank=True, verbose_name="username")
    user_password = models.CharField(max_length=35, null=False, blank=True, verbose_name="password")


class files(models.Model):
    owner= models.OneToOneField(User, unique=True, related_name="owner", on_delete=models.CASCADE)

    description = models.CharField(max_length=255, blank=True)

    excelFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)

    wordFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)
    
    txtEmailFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)
     
    txtContentFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)

    attachmentFile = models.FileField(upload_to='upload/%Y/%m/%d',null=False, blank=True,)
class DocumentForm(forms.ModelForm):
    class Meta:
        model = files
        fields = ('description', 'excelFile', 'wordFile', 'txtEmailFile', 'txtContentFile', 'attachmentFile')
views.py(仅一个函数):

@login_required(login_url="login")
def sendmail(request):

    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)

        if form.is_valid():
            form.save()
            return redirect('sendmail')

        else:
            form = DocumentForm()

    return render(request, 'sendmail.html')
我没有在这里添加html文件,因为我收到了来自用户的多个文件条目,并且html文件是混合的

数据库(MySql工作台):

我该怎么做?

试试这个:

if request.method == 'POST':        
    form = DocumentForm(request.POST, request.FILES)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.owner = request.user
        instance.save()
        return redirect('sendmail')

您可以保存实例而不必提交修改一个或多个字段,然后保存并提交。

您的数据库似乎为空。请澄清,您希望用户名显示在上载文件的路径中,还是在
文档表单中获取当前用户时遇到问题?因为我尚未添加任何数据。如果我想要@jleno46,我可以添加在保存文件时,我想记录哪些用户将这些文件上载到一次上载的文件中,以便将来从数据库检索这些文件时不会出现混淆@DATOSULAIN如果您希望用户名以某种方式出现在保存的文件路径中,无论是作为单独的文件夹,对于每个用户,还是文件名中的用户名,您可以使用callable as值作为FileField的upload_to参数,并且每次Django需要为上传的文件生成路径/文件名时,都会调用此可调用项。请看更多。它将有
实例
参数,您可以从该参数访问
用户名
。非常感谢您所展示的一切,它成功了。但在保存所有者id时,它比实际用户id值多保存了1。原因是什么?可能是因为owner属性引用的类与users类不同。请理解。那么这会产生问题吗?我得到了一个错误。在为每个用户上载文件后,我无法再次上载同一用户的文件。错误消息:(1062,“密钥'mailsystem_files.owner_id'”的重复条目'2')@jleno46因为它是一个OneToOne关系,用户只能上载一个文件,一个文件可以由一个用户拥有。如果您希望用户拥有更多文件,请使用Foreignkey在您的模型中更改OneToOne。在此处检查多人关系