当前用户的 Django 动态初始值
Django Dynamic initial values for current user
我希望当前用户能够在我的 html 页面中上传文件。我尝试了一种方法,但没有用。我收到一条错误消息:“File.userFile”必须是“客户”实例
这是我的代码
models.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Customer(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=100, null=True)
def __str__(self):
return self.user.username
class File(models.Model):
userFile = models.ForeignKey(Customer, on_delete=models.CASCADE)
document = models.FileField()
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.document
forms.py
class FichierUpload(ModelForm):
class Meta:
model = File
fields = '__all__'
exclude = ['userFile']
views.py
def my_view(request, **kwargs):
print(f"Great! You're using Python 3.6+. If you fail here, use the right version.")
message = 'Upload as many files as you want!'
# Handle file upload
current_user= request.user.username
#fileuser = Customer.objects.get(user=current_user)
form = FichierUpload(request.POST or None, request.FILES)
if request.method == 'POST':
# if form.is_valid():
file = form.save(commit=False)
file.userFile = request.user
file.save()
# Redirect to the document list after POST
return redirect('my-view')
# else:
# message = 'The form is not valid. Fix the following error:'
else:
form = FichierUpload() # An empty, unbound form
# Load documents for the list page
documents = File.objects.filter(userFile__name=current_user).order_by('-uploaded_at')
# Render list page with the documents and the form
context = {'documents': documents, 'form': form, 'message': message}
return render(request, 'myApp/dossierClient.html', context)
行file.userFile = request.user
设置的是用户实例,不是客户实例。
尝试将其更改为
file.userFile = request.user.customer
将来您可能会使用自定义用户模型来解决此问题,将用户和客户属性组合到一个模型中。
我希望当前用户能够在我的 html 页面中上传文件。我尝试了一种方法,但没有用。我收到一条错误消息:“File.userFile”必须是“客户”实例
这是我的代码
models.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Customer(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=100, null=True)
def __str__(self):
return self.user.username
class File(models.Model):
userFile = models.ForeignKey(Customer, on_delete=models.CASCADE)
document = models.FileField()
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.document
forms.py
class FichierUpload(ModelForm):
class Meta:
model = File
fields = '__all__'
exclude = ['userFile']
views.py
def my_view(request, **kwargs):
print(f"Great! You're using Python 3.6+. If you fail here, use the right version.")
message = 'Upload as many files as you want!'
# Handle file upload
current_user= request.user.username
#fileuser = Customer.objects.get(user=current_user)
form = FichierUpload(request.POST or None, request.FILES)
if request.method == 'POST':
# if form.is_valid():
file = form.save(commit=False)
file.userFile = request.user
file.save()
# Redirect to the document list after POST
return redirect('my-view')
# else:
# message = 'The form is not valid. Fix the following error:'
else:
form = FichierUpload() # An empty, unbound form
# Load documents for the list page
documents = File.objects.filter(userFile__name=current_user).order_by('-uploaded_at')
# Render list page with the documents and the form
context = {'documents': documents, 'form': form, 'message': message}
return render(request, 'myApp/dossierClient.html', context)
行file.userFile = request.user
设置的是用户实例,不是客户实例。
尝试将其更改为
file.userFile = request.user.customer
将来您可能会使用自定义用户模型来解决此问题,将用户和客户属性组合到一个模型中。