【问题标题】:Django AttributeError 'float' object has no attribute 'split'Django AttributeError 'float' 对象没有属性 'split'
【发布时间】:2016-07-25 07:19:08
【问题描述】:

我安装了模块 Django Import / Export link 安装很顺利。现在,当我想导入扩展名为 .xls 的文件时,它会显示以下错误:

AttributeError at /admin/xxxx/xxxx/process_import/ 'float' 没有对象属性 'split'

异常位置: C:\Python34\lib\site-packages\import_export\widgets.py 在干净的第 321 行

当我在这里编辑文件时 widgets.py 源代码

    def clean(self, value):
        if not value:
            return self.model.objects.none()
        if isinstance(value, float):
            ids = [int(value)]
        else:
            ids = value.split(self.separator)
        ids = filter(None, value.split(self.separator))
        return self.model.objects.filter(**{
            '%s__in' % self.field: ids
        })

这是第 321 行 ids = filter(None, value.split(self.separator))

Django 模型

class Vehicule(models.Model):
    matricule = models.CharField(max_length=200)
    modele = models.CharField(max_length=200)
    annee = models.IntegerField()

    def __str__(self):
        return self.matricule

class Ligne(models.Model):
    nom = models.CharField(max_length=200)
    vehicule = models.ManyToManyField(Vehicule, through='Affecter_Vehicule_Ligne')

    def __str__(self):
        return str(self.nom)

class Affecter_Vehicule_Ligne(models.Model):
    vehicule = models.ForeignKey(Vehicule, on_delete=models.CASCADE)
    ligne = models.ForeignKey(Ligne, on_delete=models.CASCADE)
    actif = models.BooleanField(default=False)
    dateAffectation = models.DateTimeField(null=True)

    def __str__(self):
        return str(self.dateAffectation)


class Arret(models.Model):
   nom = models.CharField(max_length=200, null=True)
   latitude = models.CharField(max_length=200, null=True)
   longitude = models.CharField(max_length=200, null=True)
   lignes = models.ManyToManyField(Ligne, through='Ligne_Arret')

   def __str__(self):
       return str(self.nom)

class Ligne_Arret(models.Model):
    sens = models.CharField(max_length=200)
    section = models.BooleanField(default=False)
    ligne = models.ForeignKey(Ligne, on_delete=models.CASCADE)
    arret = models.ForeignKey(Arret, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.arret)

Django 管理员

class VehiculeAdmin(admin.ModelAdmin):
    list_display = ('matricule', 'modele', 'annee')
    search_fields = ('matricule', 'modele')

class Affecter_Vehicule_LigneAdmin(admin.ModelAdmin):
    list_display = ('vehicule', 'dateAffectation', 'ligne')

class ArretAdmin(ImportExportModelAdmin):
    pass

class Ligne_ArretAdmin(admin.ModelAdmin):
    list_display = ('ligne', 'arret', 'section', 'sens')

admin.site.register(Vehicule, VehiculeAdmin)
admin.site.register(Ligne)
admin.site.register(Affecter_Vehicule_Ligne, Affecter_Vehicule_LigneAdmin)
admin.site.register(Arret, ArretAdmin)
admin.site.register(Ligne_Arret, Ligne_ArretAdmin)

请帮我解决这个问题???

【问题讨论】:

    标签: mysql django python-3.x


    【解决方案1】:

    您正在尝试在此行中拆分浮点值ids = filter(None, value.split(self.separator))

    我认为您可以删除此行。当您处理 None 案例并在之前拆分时。

    【讨论】:

    • 感谢您现在的回复,当我删除此行时,会出现另一个错误无法在指定中间模型的 ManyToManyField 上设置值。改用 transports.Ligne_Arret 的经理。
    • 您的问题中缺少有关该错误的代码。发生错误是因为您在 ManyToMany 关系中使用了 through 参数。那么你不能使用add 来创建关系。请参阅相关文档:docs.djangoproject.com/es/1.9/topics/db/models/…
    • 谢谢您,我阅读了此文档,但是当我导入文件 .xls 时,此错误出现在 /admin/xxxx/xxxx/process_import/ 上的 AttributeError 无法在指定中间模型的 ManyToManyField 上设置值。改用 transports.Ligne_Arret 的经理。异常位置:C:\Python34\lib\site-packages\django\db\models\fields\related_descriptors.py 在集合中,第 882 行 ....
    • 当我编辑文件 related_descriptors.py def set(self, objs, **kwargs): if not rel.through._meta.auto_created: opts = self.through._meta raise AttributeError("Cannot set values on a ManyToManyField which specified an """中间模型。改用 %s.%s 的管理器。" % (opts.app_label, opts.object_name) )
    猜你喜欢
    • 2017-07-02
    • 2019-07-19
    • 2018-03-14
    • 2016-09-11
    • 2021-04-05
    • 2016-01-31
    • 2016-09-19
    • 2020-09-14
    • 2021-07-25
    相关资源
    最近更新 更多