为什么filechoice.value()无?

发布于 2025-02-02 04:49:05 字数 3448 浏览 2 评论 0原文

我正在Django工作3.2.13尝试使用链式外键创建文件模型的简单上传表单。我尝试过使用基本表单模型和Modelform创建表单,但是,即使在检查请求时也没有数据,request_file = request.files.files.files ['document.files ['document']如果'request.files.files.files.files else无无效。

views.py

def home(request):
    if handleAuth(request) is not None:
        return handleAuth(request)
    user = request.user

    if request.method == "POST":
        # if the post request has a file under the input name 'document', then save the file.
        form = FileSubmissionForm(user, request.POST, request.FILES)
        #print(request.FILES)
        #request_file = request.FILES['document'] if 'document' in request.FILES else None
        #if request_file:
        form.save()
        #else:
        #    print("NO FILE")

    userFiles = []
    if user.is_company_admin:
        temp = StorageFile.objects.filter(company_key=user.company_key)
    else:
        temp = StorageFile.objects.filter(company_key=user.company_key,
                                          profile__in=user.user_profiles.all())
    temp.order_by("profile")
    for file in temp:
        userFiles.append({"name": file.getFileName(), "path": file.getMediaPath()})

    form = FileSubmissionForm(user)

    return render(request=request,
                  template_name="fileCloudApp/home.html",
                  context={"userHasAdmin": user.is_company_admin, "files": userFiles, "form": form})

forms.py

from django import forms
from fileCloudApp.models import StorageFile
from loginApp.models import UserProfile


class FileSubmissionForm(forms.Form):
    fileChoice = forms.FileField()
    profileChoice = forms.ModelChoiceField(queryset=UserProfile.objects.none(), label="Choose profile")

    def __init__(self, user, *args, **kwargs):
        super(FileSubmissionForm, self).__init__(*args, **kwargs)

        if user.is_company_admin:
            temp = UserProfile.objects.filter(company_key=user.company_key)
        else:
            temp = user.user_profiles.all()
        temp.order_by("label")
        self.fields["profileChoice"].queryset = temp
        self.user = user

    def save(self):
        print(self["fileChoice"].value()) # None
        pro = UserProfile.objects.filter(id=int(self["profileChoice"].value()))
        if len(pro) > 0:
            pro = pro[0]
            print(pro)

models.py

class StorageFile(models.Model):
    date_updated = models.DateTimeField('Date Updated', default=timezone.now)
    company_key = models.ForeignKey(CompanyModel, verbose_name="Company", on_delete=models.CASCADE)
    file_upload = models.FileField(upload_to=company_directory_path)
    profile = ChainedForeignKey(
        UserProfile,
        chained_field="company_key",
        chained_model_field="company_key",
        show_all=False,
        auto_choose=True,
        sort=True,
        on_delete=models.PROTECT)

    def getLocalPath(self):
        return self.file_upload.name.split(str(self.company_key.id) + "/")[1]

    def getMediaPath(self):
        return "get/{0}/0/{1}".format(self.id, self.getFileName())

    def getFileName(self):
        return self.file_upload.name.split("/")[-1]

    def getFilePath(self):
        return settings.MEDIA_ROOT + "{0}/{1}".format(str(self.company_key.id), self.getFileName())

    def __str__(self):
        return str(self.company_key) + ": " + str(self.file_upload)

I am working in Django 3.2.13 trying to create a simple upload form for a file model with a chained foreign key. I have tried creating a form with a basic form model and a ModelForm, however, even when checking request.FILES there is no data and request_file = request.FILES['document'] if 'document' in request.FILES else Noneyields None.

views.py

def home(request):
    if handleAuth(request) is not None:
        return handleAuth(request)
    user = request.user

    if request.method == "POST":
        # if the post request has a file under the input name 'document', then save the file.
        form = FileSubmissionForm(user, request.POST, request.FILES)
        #print(request.FILES)
        #request_file = request.FILES['document'] if 'document' in request.FILES else None
        #if request_file:
        form.save()
        #else:
        #    print("NO FILE")

    userFiles = []
    if user.is_company_admin:
        temp = StorageFile.objects.filter(company_key=user.company_key)
    else:
        temp = StorageFile.objects.filter(company_key=user.company_key,
                                          profile__in=user.user_profiles.all())
    temp.order_by("profile")
    for file in temp:
        userFiles.append({"name": file.getFileName(), "path": file.getMediaPath()})

    form = FileSubmissionForm(user)

    return render(request=request,
                  template_name="fileCloudApp/home.html",
                  context={"userHasAdmin": user.is_company_admin, "files": userFiles, "form": form})

forms.py

from django import forms
from fileCloudApp.models import StorageFile
from loginApp.models import UserProfile


class FileSubmissionForm(forms.Form):
    fileChoice = forms.FileField()
    profileChoice = forms.ModelChoiceField(queryset=UserProfile.objects.none(), label="Choose profile")

    def __init__(self, user, *args, **kwargs):
        super(FileSubmissionForm, self).__init__(*args, **kwargs)

        if user.is_company_admin:
            temp = UserProfile.objects.filter(company_key=user.company_key)
        else:
            temp = user.user_profiles.all()
        temp.order_by("label")
        self.fields["profileChoice"].queryset = temp
        self.user = user

    def save(self):
        print(self["fileChoice"].value()) # None
        pro = UserProfile.objects.filter(id=int(self["profileChoice"].value()))
        if len(pro) > 0:
            pro = pro[0]
            print(pro)

models.py

class StorageFile(models.Model):
    date_updated = models.DateTimeField('Date Updated', default=timezone.now)
    company_key = models.ForeignKey(CompanyModel, verbose_name="Company", on_delete=models.CASCADE)
    file_upload = models.FileField(upload_to=company_directory_path)
    profile = ChainedForeignKey(
        UserProfile,
        chained_field="company_key",
        chained_model_field="company_key",
        show_all=False,
        auto_choose=True,
        sort=True,
        on_delete=models.PROTECT)

    def getLocalPath(self):
        return self.file_upload.name.split(str(self.company_key.id) + "/")[1]

    def getMediaPath(self):
        return "get/{0}/0/{1}".format(self.id, self.getFileName())

    def getFileName(self):
        return self.file_upload.name.split("/")[-1]

    def getFilePath(self):
        return settings.MEDIA_ROOT + "{0}/{1}".format(str(self.company_key.id), self.getFileName())

    def __str__(self):
        return str(self.company_key) + ": " + str(self.file_upload)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

离不开的别离 2025-02-09 04:49:05

表单必须包含enctype =“ Multipart/form-data”

<form action="" method="post" enctype="multipart/form-data">

Form must contain enctype="multipart/form-data"

<form action="" method="post" enctype="multipart/form-data">
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文