django admin链接到OneToOneField

时间:2013-01-26 10:02:26

标签: django django-admin

我有以下模特:

class OrderData(models.Model):
    data = models.TextField()

class Order(models.Model):
    order_data = models.OneToOneField(OrderData)

在我的订单详情页面的管理界面中,我需要OneToOne字段作为链接而不是下拉列表。

我试图通过编写自定义OrderAdmin来解决它:

class OrderAdmin(admin.ModelAdmin):
    readonly_fields = ('order_data',)

    def order_data(self, instance):
        return "<a href=\"/\">index</a>"

    address_report.short_description = "Order_data"
    address_report.allow_tags = True

admin.register(Order, OrderAdmin)

但似乎不起作用。

2 个答案:

答案 0 :(得分:1)

定义一个小部件:

class OrderDataLinkWidget(Widget):
    def render(self, name, value, attrs=None):
        url ="/admin_url_to_use/%s"%value #or use reverse
        return "<a href='%s'>order data</a>"%(url, )

在admin.py中使用formfield_overrides:

class OrderAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.OneToOneField: {'widget': OrderDataLinkWidget},
    }

或者,如果您有更多OneToOneField

,请定义自定义管理表单

答案 1 :(得分:0)

这个,但我使用的是grapelli app:

class BankAccountAdmin(admin.ModelAdmin):
    raw_id_fields = ('user', 'bank')
    related_lookup_fields = { 'user': ['user'], 'bank': ['bank'],}

如果您不想使用它,可以在forms.py中编码,而不是在admin.py中编码