我有以下模特:
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)
但似乎不起作用。
答案 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中编码