1

我有以下型号:

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)

但似乎它不起作用。

4

2 回答 2

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,请定义自定义管理表单

于 2013-01-26T11:43:24.840 回答
0

这一个,但我使用gratelli应用程序:

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

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

于 2013-01-26T11:35:35.620 回答