如何基于包含FileField的模型在DjangoWebApp中获取文件名?

时间:2018-07-29 13:16:15

标签: python django web django-models django-views

我正在制作一个电子邮件传递WebApp,我有一个带有Email uploadcsvfile 类,用于从其中上传 .csv 联系人文件用户计算机到位置CONTACT_DIR的服务器上,我无法确定是如何在我的contacts_some_char.csv中获取保存的views.py的名称,所以获得它的名称的目的是我可以解析电子邮件列表并将电子邮件发送给他们。

我的model.py如下:

class Email(models.Model):
    fromemail = models.EmailField(blank = False, max_length = 254)
    uploadcsvfile = models.FileField(upload_to = 'Contacts', blank = False)
    subject = models.CharField(blank=False,max_length = 254)
    bodyHeading = models.CharField(blank = False,max_length = 254)
    bodytext = models.TextField(blank = False)
    name = models.CharField(blank = False,max_length = 254)

这是我的views.py

def index(request):

    if request.method == 'POST':
        email_form = EmailForm(request.POST, request.FILES)
        if email_form.is_valid():
            email_form.save(commit = True)
            print(Email.uploadcsvfile)
            contacts = Contacts()
            #path = settings.CONTACT_DIR
            f = open(settings.CONTACT_DIR+"/"+str(uploaded_file_name))
            csv_f = csv.reader(f)
            Emails = []
            Names= []
            L_Names = []
            for x in csv_f:
                Emails.append(x[0])
                Names.append(x[1])
                L_Names.append(x[2])
            f.close()
            contacts.ListOfEmails = json.dumps(Emails)
            contacts.ListOfFirstNames = json.dumps(Names)
            contacts.ListOfLastNames = json.dumps(L_Names)
            contacts.save()

这里是forms.py

from django import forms
from dcsvreader.models import Email

class EmailForm(forms.ModelForm):
    class Meta():
        model = Email
        fields = "__all__"

又名(我)如何在uploaded_file_name中得到 views.py ,因此我正在阅读各种QnA,因此这与 FileDescriptor ,但还找不到 print(Email.uploadcsvfile) 给出的精确度如何, <django.db.models.fields.files.FileDescriptor object at 0x03F7DF90> 作为输出。

2 个答案:

答案 0 :(得分:1)

request.FILES是一个类似于字典的对象,包含所有上载的文件,而uploadcsvfile是您在其中发出POST请求的 key 。因此,request.FILES['uploadcsvfile']将特定文件保存为 InMemoryUploadedFile ,并且它具有一个变量.name,该文件包含文件名

尝试一下,

file_name = request.FILES['uploadcsvfile'].name


参考
uploadfile.name
request.FILES

答案 1 :(得分:0)

我本人对django还是陌生的,但看起来像这里:

print(Email.uploadcsvfile)

您正在尝试打印类属性而不是实例的属性。 您尝试过以下吗?

print(email_form.uploadcsvfile.name)