当前位置:  开发笔记 > 后端 > 正文

Django InlineModelAdmin给出错误“ MediaDefiningClass”对象不可迭代

如何解决《DjangoInlineModelAdmin给出错误“MediaDefiningClass”对象不可迭代》经验,为你挑选了1个好方法。

来自models.py

class Indicator(models.Model):
    name = models.CharField(max_length=50)
    youtube = models.CharField(max_length=LONG_BLOG_POST_CHAR_LEN)
    description = models.CharField(max_length=LONG_BLOG_POST_CHAR_LEN)    
    recommendation = models.CharField(max_length=LONG_BLOG_POST_CHAR_LEN)
    isPublic = models.BooleanField(default=False)
    methods_path = models.CharField(max_length=100,default=None)
    meta_description = models.CharField(max_length=150,default='')
    image_path = models.CharField(max_length=100,blank=True)

    def __str__(self):
        return self.name   

class IndicatorParameterInt(models.Model):
    name = models.CharField(max_length=50)
    value = models.IntegerField(default=1)
    indicator_int_parameter = models.ForeignKey(Indicator, on_delete=models.CASCADE)
    hidden = models.BooleanField(default=False)

class IndicatorParameterFloat(models.Model):
    name = models.CharField(max_length=50)
    setting = models.FloatField(default=1)
    indicator_float_parameter = models.ForeignKey(Indicator, on_delete=models.CASCADE)
    hidden = models.BooleanField(default=False)

class Comparison(models.Model):
    name = models.CharField(max_length=100)

来自admin.py

from django.contrib import admin
from .models import *

# Register your models here.
admin.site.register( MarketData )
admin.site.register( Indicator )
admin.site.register( UserProfile )



class IndicatorParameterIntInline(admin.TabularInline):
    model = IndicatorParameterInt
    fk_name = "indicator_int_parameter"

class IndicatorParameterFloatInline(admin.TabularInline):
    model = IndicatorParameterFloat
    fk_name = "indicator_float_parameter"   

class ComparisonInline(admin.TabularInline):
    model = Comparison
    fk_name = "Comparison"  

class IndicatorInline(admin.ModelAdmin):
    inlines = [ 
                IndicatorParameterIntInline,
                IndicatorParameterFloatInline,
                ComparisonInline, 
              ]

admin.site.unregister( Indicator )
admin.site.register( IndicatorInline )

错误TypeError:'MediaDefiningClass'对象不可迭代出现在admin的最后一行:admin.site.register(IndicatorInline)。我尝试先注册IndicatorInline还是任何外键类都没有关系。

我引用了这篇文章,鼓励使用fk_name属性。无论是否使用fk_name,都会发生错误。



1> Alasdair..:

注册模型管理类时,需要指定模型。

admin.site.register(Indicator, IndicatorInline)

请注意,如果您admin.site.register( Indicator )从模块顶部删除,则admin.site.unregister(Indicator)以后无需调用。

我建议重命名IndicatorInline-这是具有内联的模型管理员,因此最好命名为IndicatorAdmin。在这种情况下,您可以将其注册到:

admin.site.register(Indicator, IndicatorAdmin)

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有