给你的django后台模型实例加上一个可以直接访问的链接

Django Admin URL 显示技巧
本文介绍了一种在 Django Admin 中为特定模型实例显示详细页面链接的方法,通过使用 `reverse` 和 `format_html` 函数自定义了一个展示实例 URL 的字段。

直接上代码:

admin.py

from django.core.urlresolvers import reverse
from django.utils.html import format_html

from .models import Flavor,IceCreamBar

class IceCreamBarAdmin(admin.ModelAdmin):
list_display = ("title","shell","filling")
readonly_fields = ('show_url',)

def show_url(self,instance):
    url = reverse('flavors:ice_cream_bar_detail',kwargs={"pk":instance.pk})
    response = format_html("""<a href='{0}'>{1}</a>""",url,url)
    return response

show_url.short_description = "Ice Cream Bar URL"
show_url.allow_tags = True #永远不要将allow_tags暴露给未授权的用户!

admin.site.register(Flavor)
admin.site.register(IceCreamBar,IceCreamBarAdmin)

Django 中,如果需要从后台获取一个名为 `waisaler` 的对象并将其转换为 JSON 格式返回给前端,可以使用 Django 提供的 `JsonResponse` 和模型查询功能来实现。以下是一个完整的实现方式: ### 获取对象并返回 JSON 响应 1. **从数据库中获取对象** 假设 `Waisaler` 是一个模型类,并且你希望通过主键(`pk`)获取特定对象,可以使用 `get_object_or_404` 来安全地获取对象。 2. **将对象转换为可序列化的字典** Django 提供了 `model_to_dict` 函数,可以将模型实例转换为 Python 字典,便于 JSON 序列化。 3. **返回 JSON 响应** 使用 `JsonResponse` 可以直接将字典转换为 JSON 并返回给前端。 ### 示例代码 ```python from django.http import JsonResponse from django.shortcuts import get_object_or_404 from django.core import serializers from .models import Waisaler def get_waisaler_json(request, pk): waisaler = get_object_or_404(Waisaler, pk=pk) # 获取对象,若不存在则返回 404 data = { "id": waisaler.id, "name": waisaler.name, "email": waisaler.email, # 添加其他字段 } return JsonResponse(data) ``` ### 使用 `model_to_dict` 的方式 如果希望自动转换模型字段,可以使用 `model_to_dict`: ```python from django.core.exceptions import ObjectDoesNotExist from django.http import JsonResponse from django.shortcuts import get_object_or_404 from django.forms.models import model_to_dict from .models import Waisaler def get_waisaler_json(request, pk): try: waisaler = get_object_or_404(Waisaler, pk=pk) data = model_to_dict(waisaler) # 自动转换模型字段为字典 return JsonResponse(data) except ObjectDoesNotExist: return JsonResponse({"error": "Object not found"}, status=404) ``` ### 返回多个对象的 JSON 数据 如果需要返回多个 `Waisaler` 对象,可以使用 `values()` 或 `serializers.serialize()`: ```python from django.http import JsonResponse from .models import Waisaler def get_waisalers_json(request): waisalers = Waisaler.objects.all().values('id', 'name', 'email') # 指定字段 data = list(waisalers) # 转换为列表 return JsonResponse(data, safe=False) ``` ### 使用 `serializers.serialize` 返回完整对象信息 如果需要包括模型元数据(如模型名称、字段类型等),可以使用 `serializers.serialize`: ```python from django.core import serializers from django.http import JsonResponse from .models import Waisaler def get_waisaler_full_json(request, pk): waisaler = Waisaler.objects.get(pk=pk) data = serializers.serialize('json', [waisaler]) # 序列化为 JSON return JsonResponse(data, safe=False) ``` ### 注意事项 - `JsonResponse` 默认只接受字典类型的数据,如果传递列表,需要设置 `safe=False`。 - 如果模型中包含非标量字段(如文件字段、关系字段),需要确保这些字段可以被正确序列化。 - 前端可以通过 `fetch` 或 `axios` 等方式获取该响应并解析 JSON 数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值