当前用户的 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

将来您可能会使用自定义用户模型来解决此问题,将用户和客户属性组合到一个模型中。