You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Admin中按参数获取指定模型的变更列表子集

Django 数据过滤解决方案

问题1:仅展示指定水源点的化学数据记录

首先确认Dquimicos模型已关联Pagua外键,示例模型定义:

# models.py
class Dquimicos(models.Model):
    agua = models.ForeignKey(Pagua, on_delete=models.CASCADE, related_name='chemical_records')
    # 其他化学数据字段(如pH值、污染物含量等)

自定义类视图实现

基于ListView改造,从URL路径获取水源点ID并过滤:

# views.py
from django.views.generic import ListView
from .models import Dquimicos

class VerdQuimicosListView(ListView):
    model = Dquimicos
    template_name = 'chemical_records.html'  # 替换为你的模板路径

    def get_queryset(self):
        # 从URL路径参数获取水源点ID
        agua_id = self.kwargs.get('agua_id')
        queryset = super().get_queryset()
        if agua_id:
            # 过滤出对应水源点的化学数据
            queryset = queryset.filter(agua_id=agua_id)
        return queryset

对应的URL配置:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('chemical/<int:agua_id>/', VerdQuimicosListView.as_view(), name='verdquimicos'),
    # 其他URL规则
]

自定义函数视图实现

如果是函数式视图,直接过滤查询集:

# views.py
from django.shortcuts import render
from .models import Dquimicos

def verdquimicos(request, agua_id):
    chemical_records = Dquimicos.objects.filter(agua_id=agua_id)
    return render(request, 'chemical_records.html', {'records': chemical_records})

问题2:仅展示指定ID的水源点记录

自定义类视图实现

如果是基于ListView的水源点列表,仅返回指定ID的记录:

# views.py
from django.views.generic import ListView
from .models import Pagua

class VerPaguaListView(ListView):
    model = Pagua
    template_name = 'water_source.html'

    def get_queryset(self):
        agua_id = self.kwargs.get('agua_id')
        queryset = super().get_queryset()
        if agua_id:
            # 仅保留指定ID的水源点(含继承的Pasup记录)
            queryset = queryset.filter(id=agua_id)
        return queryset

如果需要单独展示地表水点(Pasup),可修改过滤条件:

queryset = Pasup.objects.filter(id=agua_id)

函数视图实现

直接获取指定ID的水源点,若不存在返回404:

# views.py
from django.shortcuts import render, get_object_or_404
from .models import Pagua

def verpagua(request, agua_id):
    water_source = get_object_or_404(Pagua, id=agua_id)
    # 若需展示修改页面,建议使用UpdateView
    return render(request, 'water_source_edit.html', {'source': water_source})

Django Admin 过滤配置

如果是在Admin后台的变更列表中过滤,重写Admin类的get_queryset方法:

# admin.py
from django.contrib import admin
from .models import Pagua, Dquimicos

class PaguaAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        # 从GET参数获取水源点ID,如 /admin/yourapp/pagua/?agua_id=1
        agua_id = request.GET.get('agua_id')
        if agua_id:
            queryset = queryset.filter(id=agua_id)
        return queryset

class DquimicosAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        queryset = super().get_queryset(request)
        agua_id = request.GET.get('agua_id')
        if agua_id:
            queryset = queryset.filter(agua_id=agua_id)
        return queryset

admin.site.register(Pagua, PaguaAdmin)
admin.site.register(Dquimicos, DquimicosAdmin)

关键注意事项

  • 确保URL配置正确传递agua_id参数,优先使用路径参数(更符合REST规范)
  • 类视图中通过self.kwargs获取路径参数,self.request.GET获取URL查询参数
  • 若模型关联字段名不是agua或agua_id,需替换为实际字段名
  • 多表继承的Pasup会被包含在Pagua的查询集中,如需单独过滤需直接查询Pasup模型

内容的提问来源于stack exchange,提问作者wrcarrizo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:45:37