我正在为一个satchmo应用程序召集管理员。Satchmo使用one to one关系来扩展基础Product
模型,我想在一个页面上对其进行编辑。
有可能有一个一元关系作为内联?如果没有,那么向我的管理员的给定页面添加一些字段并最终保存到OneToOne关系中的最佳方法是什么?
例如:
class Product(models.Model):
name = models.CharField(max_length=100)
...
class MyProduct(models.Model):
product = models.OneToOne(Product)
...
我为我的管理员尝试过这个,但它不起作用,似乎需要一个外键:
class ProductInline(admin.StackedInline):
model = Product
fields = ('name',)
class MyProductAdmin(admin.ModelAdmin):
inlines = (AlbumProductInline,)
admin.site.register(MyProduct, MyProductAdmin)
会引发此错误:<class 'satchmo.product.models.Product'> has no ForeignKey to <class 'my_app.models.MyProduct'>
这是唯一的办法吗?
编辑:只是尝试了以下代码来直接添加字段。。。也不起作用:
class AlbumAdmin(admin.ModelAdmin):
fields = ('product__name',)
最后一个问题是,对于多个子类型,什么是最好的解决方案。E、 g类产品有子类图书和子类光盘。在这里显示的方式,你将不得不编辑一个产品的一般项目加上书籍的子类型项目和CD的子类型项目。所以即使你只想添加一本书,你也可以得到CD的字段。如果添加子类型(如DVD),则会得到三个子类型字段组,而实际上只需要一个子类型组,在上述示例中为books。
也许用继承代替单一的关系
或者使用代理类
在admin.py中
在这个变体中,您的产品将处于内联状态。
完全有可能把内联用于一对一的关系。但是,定义关系的实际字段必须在内联模型上,而不是在父模型上,其方式与ForeignKey相同。把它调过来就行了。
在注释后编辑:您说父模型已在管理员处注册:然后取消注册并重新注册。
相关问题 更多 >
编程相关推荐