【问题标题】:save() got multiple values for keyword argument 'max_length'save() 为关键字参数“max_length”获取了多个值
【发布时间】:2018-06-05 14:48:54
【问题描述】:

我用的是django的save方法,报错save() got multiple values for keyword argument 'max_length'

这是我的模型:

def generate_path(instance, filename):
     section=instance.document_title.historical_set.last().id_section
     year=str(section.year.number)
     course=(section.course.name)
     section=str(section.number)
     curso=curso.encode('utf-8').decode('utf-8')
     return os.path.join(ciclo,curso,seccion,filename)


class UseExistingStorage(FileSystemStorage):

   def save(name, content, max_length=None):
       if not self.exists(name):
           return super().save(self,name, content, max_length)
       return name

class Field(models.Model):
     type=models.CharField(max_length=50, choices=document_type, default=None)
     document_title=models.ForeignKey(Document,on_delete=models.CASCADE,null=True)
     file = models.FileField(null=True,blank=True,     upload_to=generate_path,storage=UseExistingStorage())
     rubric=models.FileField(null=True,blank=True,upload_to=generate_path,storage=UseExistingStorage())

这就是我保存字段的方式:

if FieldForm.is_valid():
  course=request.POST.get('course')
  coursename=Course.objects.values('name').get(name=course)

  try:
       field.file=request.FILES['file']

  except:
        pass
  try:
       field.rubric=request.FILES['rubric']

  except:
       pass
  if type.find('a')!=-1:
       field.type='a'
  elif coursename.find('b')!=-1 :
       field.type='b'
  elif type.find('c')!=-1:
       field.type='c'
  else:
       field.type='d'

  field.document_title=documentTitle
  field.save()

在生成路径中,我执行将文档保存在年/课程/部分中的路径,并在存储中检查该字段是否存在于该位置。但我不知道为什么会出现该错误

【问题讨论】:

    标签: django file-upload


    【解决方案1】:

    您不需要明确传递selfsuper() 会为您完成,试试这个:

    return super().save(name, content, max_length)
    

    而不是

    return super().save(self,name, content, max_length)
    

    覆盖save() 的第一个参数也应该是self

    def save(self, name, content, max_length=None):
       if not self.exists(name):
           return super().save(name, content, max_length)
       return name
    

    UPD

    对于 python2,您应该将 selfclass 作为 super 的参数传递:

    return super(UseExistingStorage, self).save(name, content, max_length)
    

    【讨论】:

    • 现在我收到了这个错误,super() takes at least 1 argument (0 given),我使用的是 python 2.7 和 django 1.11
    • @Mecha for python2 你应该使用带有参数的super()。查看更新。
    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 2013-08-04
    • 2016-06-24
    • 2015-05-18
    • 2013-03-09
    • 2016-04-25
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多