Python Django:将上传文件中的文本写入文本字段

Python Django:将上传文件中的文本写入文本字段,python,django,file-upload,Python,Django,File Upload,我有以下型号: class Clean(models.Model): name = models.CharField(max_length=100) cv = models.TextField(max_length=10000) cvfile = models.FileField() 当用户从表单提交名称和文件时,我试图将cvfile的内容写入cv。我相信这是可以做到的,因为文件和文本字段将在同一个对象中。该文件始终为.txt,因此我假设可以执行一个简单的.read()

我有以下型号:

class Clean(models.Model):
    name = models.CharField(max_length=100)
    cv = models.TextField(max_length=10000)
    cvfile = models.FileField()
当用户从表单提交名称和文件时,我试图将
cvfile
的内容写入
cv
。我相信这是可以做到的,因为文件和文本字段将在同一个对象中。该文件始终为.txt,因此我假设可以执行一个简单的.read()

我是否应该有一个表单调用的函数来执行此操作?如果是这样,如何做到这一点

def writeCV(self):
        get_text = cvfile.open().read()
        #write to cv field somehow

        return self.cv
我正在使用django 1.9

从Messaoud的回答中回溯:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/cleaner/clean/add/

Django Version: 1.9
Python Version: 3.6.4
Installed Applications:
['cleaner.apps.CleanerConfig',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "C:\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Python\Python36-32\lib\site-packages\django\views\generic\base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "C:\Python\Python36-32\lib\site-packages\django\views\generic\base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "C:\Python\Python36-32\lib\site-packages\django\views\generic\edit.py" in post
  255.         return super(BaseCreateView, self).post(request, *args, **kwargs)

File "C:\Python\Python36-32\lib\site-packages\django\views\generic\edit.py" in post
  221.             return self.form_valid(form)

File "C:\Python\Python36-32\lib\site-packages\django\views\generic\edit.py" in form_valid
  200.         self.object = form.save()

File "C:\Python\Python36-32\lib\site-packages\django\forms\models.py" in save
  451.             self.instance.save()

File "C:\Users\barry\Desktop\College\Year 4\Semester 2\cvCleaner\cvcleaner\cleaner\models.py" in save
  11.         get_text = self.cvfile.open().read()

Exception Type: AttributeError at /cleaner/clean/add/
Exception Value: 'NoneType' object has no attribute 'read'

您可以通过覆盖
模型中的
保存
方法来实现这一点

class Clean(models.Model):
    name = models.CharField(max_length=100)
    cv = models.TextField(max_length=10000, blank = True, null = True)
    cvfile = models.FileField()

    def save(self, *args, **kwargs):
        get_text = self.cvfile.open().read()
        self.cv = get_text
        super(Clean, self).save(*args, **kwargs) # Call the "real" save() method.
或者通过使用信号


感谢您的回复,您建议使用什么方式?我已经尝试实现了“def save”功能,是否必须在我的视图中调用该功能?
save
将在您尝试保存模型实例时自动触发hmm,当显示“cv”时,它没有文件的内容。尝试更改
super().save(*args,**kwargs)
super(干净、自洁)。save(*args,**kwargs)
def writeCV(sender, instance, **kwargs):
    get_text = instance.cvfile.open().read()
    instance.cv = get_text
    instance.save()
post_save.connect(writeCV, sender=Clean)