Python 在保存Django模型表单之前,如何将数据更新到相关字段

Python 在保存Django模型表单之前,如何将数据更新到相关字段,python,django,django-models,django-views,django-forms,Python,Django,Django Models,Django Views,Django Forms,传输文件时,我正在尝试更新指定文件的用户实例。transfer POST操作成功完成,没有出现任何错误,但是文件模型的用户实例没有更新为“transfer_to”用户实例。这就是我到目前为止所做的: 型号.py class File(models.Model): file_type_choice = ( ('General', 'General'), ('Personal', 'Personal') ) user = models.Fore

传输文件时,我正在尝试更新指定文件的用户实例。transfer POST操作成功完成,没有出现任何错误,但是文件模型的用户实例没有更新为“transfer_to”用户实例。这就是我到目前为止所做的:

型号.py

class File(models.Model):
    file_type_choice = (
        ('General', 'General'),
        ('Personal', 'Personal')
    )
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name='files')
    file_type = models.CharField(max_length=250, choices=file_type_choice)
    file_name = models.CharField(max_length=250)
    recipient_name = models.CharField(max_length=250)

    def __str__(self):
        return f'{self.file_name}'

    def get_absolute_url_file_transfer(self):
        return reverse('file_transfer', args=[self.pk])


class Transfer(models.Model):
    file = models.ForeignKey('File', on_delete=models.CASCADE, null=True)
    transfer_from = models.ForeignKey(User, on_delete=models.CASCADE, related_name='transfers_from', null=True)
    transfer_to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='transfers_to', null=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'{self.transfer_from} {self.transfer_to}'
class FileTransferForm(forms.ModelForm):
    class Meta:
        model = Transfer
        fields = ['transfer_from', 'transfer_to', ]
@login_required
def outgoing_file_list(request):
    if request.user.is_superuser:
        files = File.objects.all()
    else:
        files = File.objects.filter(Q(transfer__transfer_to=request.user) | Q(user=request.user))

    context = {
        'files': files,
    }

    return render(request, 'outgoing_file_list.html', context)


def file_transfer(request, pk):
    file = get_object_or_404(File, pk=pk)

    if request.method == "POST":
        form = FileTransferForm(data=request.POST)
        if form.is_valid():
            form_edit = form.save(commit=False)
            form_edit.file = file
            file.user = form_edit.transfer_to
            file.save()
            form_edit.save()
            return redirect('outgoing_file_list')
    else:
        form = FileTransferForm()

    context = {
        'form': form,
        'file': file,
    }

    return render(request, 'file_transfer.html', context)
forms.py

class File(models.Model):
    file_type_choice = (
        ('General', 'General'),
        ('Personal', 'Personal')
    )
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name='files')
    file_type = models.CharField(max_length=250, choices=file_type_choice)
    file_name = models.CharField(max_length=250)
    recipient_name = models.CharField(max_length=250)

    def __str__(self):
        return f'{self.file_name}'

    def get_absolute_url_file_transfer(self):
        return reverse('file_transfer', args=[self.pk])


class Transfer(models.Model):
    file = models.ForeignKey('File', on_delete=models.CASCADE, null=True)
    transfer_from = models.ForeignKey(User, on_delete=models.CASCADE, related_name='transfers_from', null=True)
    transfer_to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='transfers_to', null=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'{self.transfer_from} {self.transfer_to}'
class FileTransferForm(forms.ModelForm):
    class Meta:
        model = Transfer
        fields = ['transfer_from', 'transfer_to', ]
@login_required
def outgoing_file_list(request):
    if request.user.is_superuser:
        files = File.objects.all()
    else:
        files = File.objects.filter(Q(transfer__transfer_to=request.user) | Q(user=request.user))

    context = {
        'files': files,
    }

    return render(request, 'outgoing_file_list.html', context)


def file_transfer(request, pk):
    file = get_object_or_404(File, pk=pk)

    if request.method == "POST":
        form = FileTransferForm(data=request.POST)
        if form.is_valid():
            form_edit = form.save(commit=False)
            form_edit.file = file
            file.user = form_edit.transfer_to
            file.save()
            form_edit.save()
            return redirect('outgoing_file_list')
    else:
        form = FileTransferForm()

    context = {
        'form': form,
        'file': file,
    }

    return render(request, 'file_transfer.html', context)
视图.py

class File(models.Model):
    file_type_choice = (
        ('General', 'General'),
        ('Personal', 'Personal')
    )
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name='files')
    file_type = models.CharField(max_length=250, choices=file_type_choice)
    file_name = models.CharField(max_length=250)
    recipient_name = models.CharField(max_length=250)

    def __str__(self):
        return f'{self.file_name}'

    def get_absolute_url_file_transfer(self):
        return reverse('file_transfer', args=[self.pk])


class Transfer(models.Model):
    file = models.ForeignKey('File', on_delete=models.CASCADE, null=True)
    transfer_from = models.ForeignKey(User, on_delete=models.CASCADE, related_name='transfers_from', null=True)
    transfer_to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='transfers_to', null=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'{self.transfer_from} {self.transfer_to}'
class FileTransferForm(forms.ModelForm):
    class Meta:
        model = Transfer
        fields = ['transfer_from', 'transfer_to', ]
@login_required
def outgoing_file_list(request):
    if request.user.is_superuser:
        files = File.objects.all()
    else:
        files = File.objects.filter(Q(transfer__transfer_to=request.user) | Q(user=request.user))

    context = {
        'files': files,
    }

    return render(request, 'outgoing_file_list.html', context)


def file_transfer(request, pk):
    file = get_object_or_404(File, pk=pk)

    if request.method == "POST":
        form = FileTransferForm(data=request.POST)
        if form.is_valid():
            form_edit = form.save(commit=False)
            form_edit.file = file
            file.user = form_edit.transfer_to
            file.save()
            form_edit.save()
            return redirect('outgoing_file_list')
    else:
        form = FileTransferForm()

    context = {
        'form': form,
        'file': file,
    }

    return render(request, 'file_transfer.html', context)

你好,弗朗西斯。您正在尝试覆盖表单\u编辑吗?为什么在更新文件中的用户对象后不保存文件模型?是的,我正在尝试覆盖表单。\u编辑,在将用户对象保存到文件模型后,它不会给我想要的结果。form_edit.transfer_to不返回任何内容,我希望帮助您从form_edit中获取transfer_to用户实例,并将其保存到文件模型中的用户。@FrancisAkabo您提交的表单是否有效?如果有效,您应该在
obj.save()
上得到一个错误,类似于
NameError:name'obj'未定义。尝试在else部分中打印(form.errors)
。为了清晰起见,我随后将form\u edit修改为obj,但我已将其还原。发布后没有错误。请看我从pycharm拍摄的附加屏幕截图,并帮助我了解如何检索transfer_to的用户实例当transfer_to字段位于文件模型上时,我将引用并更新它,并用它覆盖用户字段,但当我在传输模型上实现transfer_to并与文件模型相关时,我无法引用它