首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django Admin:作为内联的OneToOne关系?

Django Admin:作为内联的OneToOne关系?
EN

Stack Overflow用户
提问于 2009-11-17 03:10:26
回答 4查看 40.6K关注 0票数 72

我正在把一个satchmo应用程序的管理。Product使用OneToOne关系来扩展基本的Satchmo模型,我想在一个页面上对其进行编辑。

可以将OneToOne关系作为内联?如果不是,那么添加几个字段到我的管理页面的最佳方式是什么,这些字段最终将保存到OneToOne关系中?

例如:

代码语言:javascript
运行
复制
class Product(models.Model):
    name = models.CharField(max_length=100)
    ...

class MyProduct(models.Model):
    product = models.OneToOne(Product)
    ...

我尝试了我的管理员,但它不工作,似乎需要一个外键:

代码语言:javascript
运行
复制
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'>

是完成此任务的唯一方法,它是一个Custom Form

编辑:刚刚尝试了以下代码来直接添加字段...也不起作用:

代码语言:javascript
运行
复制
class AlbumAdmin(admin.ModelAdmin):
    fields = ('product__name',)
EN

Stack Overflow用户

发布于 2012-09-28 20:42:57

可以使用继承而不是OneToOne关系

代码语言:javascript
运行
复制
class Product(models.Model):
    name = models.CharField(max_length=100)
    ...

class MyProduct(Product):
    .....

或使用代理类

代码语言:javascript
运行
复制
class ProductProxy(Product)
    class Meta:
        proxy = True

在admin.py中

代码语言:javascript
运行
复制
class MyProductInlines(admin.StackedInline):
    model = MyProduct

class MyProductAdmin(admin.ModelAdmin):
    inlines = [MyProductInlines]

    def queryset(self, request):
        qs = super(MyProductAdmin, self).queryset(request)
        qs = qs.exclude(relatedNameForYourProduct__isnone=True)
        return qs

admin.site.register(ProductProxy, MyProductAdmin)

在这个变种中,你的产品将是内联的。

票数 9
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1744203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档