【问题标题】:django inlines with abstract model give error带有抽象模型的 django 内联给出错误
【发布时间】:2012-11-12 21:57:59
【问题描述】:

我在 Django models.py 中有以下内容(模型被精简到只有必要的字段)

class Product(BaseProduct):
    price       = models.IntegerField()
    productfoto = models.ManyToManyField("ProductFoto", related_name="%(app_label)s_%(class)s_related")

    class Meta:
        abstract = True
        ordering = ['name']

# Inherits Product class
class ConsumerProduct(Product):
    categorie= models.ForeignKey(Categorie)
    class Meta:
        verbose_name_plural = "ConsumerProducten"


class ProductFoto(models.Model):
    myimage= FileBrowseField("Image", max_length=200, directory='producten')

这在 admins.py 中:

class ProductFotoInline(admin.TabularInline):
    extra = 1
    model = Product.productfoto.through

class ConsumerProductAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("name",)}
    inlines= [ProductFotoInline]
admin.site.register(ConsumerProduct, ConsumerProductAdmin)

请注意以下几点:

  • 产品类是抽象的
  • ConsumerProduct 继承 Product

我会说这应该可以,但是在尝试添加新的 ConsumerProduct 时出现以下 ImproperlyConfigured 错误:

'model' is a required attribute of 'ConsumerProductAdmin.inlines[0]'.

感谢任何帮助

【问题讨论】:

  • model = Product.productfoto.through。这不应该是model = ProductFoto吗?
  • 不幸的是,您的方法提供了<class 'product.models.ProductFoto'> has no ForeignKey to <class 'product.models.ConsumerProduct'>,我认为这不是理想的解决方案,因为 Product 是一个抽象类,而 ProductFoto 应该“知道”这一点,并且只能以某种方式将引用添加到 ConsumerProduct 类

标签: django django-models django-admin


【解决方案1】:

我决定将我的 Product 类设为非抽象类。通过在管理员中删除此类的注册(删除行admin.site.register(Product)) 您不会在后端看到它,但是在您的数据库中,它会有点混乱,因为您将同时拥有 ProductConsumerProduct

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2012-02-04
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多