为什么在此示例中,upload_by(uploaded_by_id)作为NULL传递给DB?

问题描述 投票:1回答:1

为什么uploade_by_id未设置为用户ID?想要将上传的文件映射到要上传的用户。

models.py

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save

class Profile(models.Model):
    CUSTOMER_TYPE = (
        ('Business', 'Business'),
        ('Personal', 'Personal'),
        )
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    customer_type = models.CharField(max_length=10,choices=CUSTOMER_TYPE)
    phone = models.CharField(max_length=10, blank=True)

    def __str__(self):
        return self.user.username

class Document(models.Model):
    uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE)
    document_name = models.FileField()
    date_created = models.DateTimeField(auto_now_add=True)
python django
1个回答
0
投票

您在视图中设置了对象的用户。模型是不知道请求的。因此,您应该将视图重写为:

@login_required
def upload(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.uploaded_by = request.user
            form.save()
            messages.success(request, 'File successfully uploaded')
            return redirect('profile')
    else:
        form = UploadFileForm()
    context = {'form': form}
    return render(request, 'users/upload.html', context)

以表格的形式排除uploaded_by字段:

class UploadFileFOrm(forms.ModelForm):
    class Meta:
        model = Document
        exclude = ['uploaded_by']
© www.soinside.com 2019 - 2024. All rights reserved.