Lau*_*ent 25 django foreign-key-relationship django-admin
我有一个带有ForeignKey的模型A到模型B.在Django admin中,如何在打开模型B的管理页面的ForeignKey字段旁边的模型A的管理页面中添加一个链接?
ger*_*ett 32
您可以执行以下操作:
models.py(示例):
model B(models.Model):
name = models.CharField(max_length=20)
model A(models.Model):
field1 = models.CharField(max_length=20)
Bkey = models.ForeignKey(B)
Run Code Online (Sandbox Code Playgroud)
admin.py
from django.core import urlresolvers
class AAdmin(admin.ModelAdmin):
list_display = ["field1","link_to_B"]
def link_to_B(self, obj):
link=urlresolvers.reverse("admin:yourapp_b_change", args=[obj.B.id]) #model name has to be lowercase
return u'<a href="%s">%s</a>' % (link,obj.B.name)
link_to_B.allow_tags=True
Run Code Online (Sandbox Code Playgroud)
将yourapp替换为您的应用程序名称.
Ben*_*b96 22
除了接受的答案之外,在较新版本的Django(1.10,1.11和2.0)中,反向方法现在位于包django.urls中(参见此链接).
此外,您必须使用format_html方法在管理员中输出HTML.所以allow_tags变得无用.
最后,要添加指向用户编辑页面的链接,我在admin.py中有此功能:
from django.urls import reverse
from django.utils.html import format_html
class ObjectAdmin(admin.ModelAdmin):
list_display = ('name', 'link_to_user')
def link_to_user(self, obj):
link = reverse("admin:auth_user_change", args=[obj.user.id])
return format_html('<a href="{}">Edit {}</a>', link, obj.user.username)
link_to_user.short_description = 'Edit user'
Run Code Online (Sandbox Code Playgroud)
Django 2.0+和Python 3.5+:
from django.urls import reverse
from django.utils.html import escape, mark_safe
@admin.register(models.YourModel)
class YourModelAdmin(BaseModelAdmin):
def model_str(self, obj: models.YourModel):
link = reverse("admin:module_model_change", args=[obj.model_id])
return mark_safe(f'<a href="{link}">{escape(obj.model.__str__())}</a>')
model_str.short_description = 'Model'
model_str.admin_order_field = 'model' # Make row sortable
list_display = (
'model_str',
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12964 次 |
| 最近记录: |