为什么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)
您在视图中设置了对象的用户。模型是不知道请求的。因此,您应该将视图重写为:
@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']