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

Django中通过Boolean字段控制Birthday模型显示People数据的需求

解决Django Admin中Birthday模型仅显示活跃用户的问题

要实现仅显示关联活跃(State=True)People的Birthday记录,同时在添加/编辑Birthday时只能选择活跃用户,只需在项目的admin.py中自定义Birthday的Admin类即可,具体步骤如下:

1. 自定义BirthdayAdmin类

在admin.py中导入所需模型,然后编写如下代码:

from django.contrib import admin
from .models import People, Birthday

class BirthdayAdmin(admin.ModelAdmin):
    # 重写查询集,仅显示关联活跃用户的Birthday记录
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        return qs.filter(People_Birthday__State=True)
    
    # 重写外键字段的查询集,仅显示活跃用户选项
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'People_Birthday':
            kwargs['queryset'] = People.objects.filter(State=True)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

# 注册自定义的Admin类
admin.site.register(People)
admin.site.register(Birthday, BirthdayAdmin)

代码说明

  • get_queryset方法:修改Admin列表页的查询结果,过滤掉关联People的State为False的Birthday记录,确保列表只显示活跃用户的生日信息。
  • formfield_for_foreignkey方法:在添加或编辑Birthday时,限制People_Birthday下拉框仅展示State=True的用户,避免误选非活跃用户。

原模型代码(参考)

class People(models.Model):
   Name = models.CharField('Name', max_length = 20, blank = False, null = False)
   Last_Name = models.CharField('Last Name', max_length = 20, blank = False, null = False)
   State = models.BooleanField('Active Client', default = True)

   class Meta:
      verbose_name = 'People'
      verbose_name_plural = 'People'
      ordering = ['Name']

   def __str__(self):
      return "{0} - {1}".format(self.Name, self.Last_Name.capitalize())

class Birthday(models.Model):
   People_Birthday = models.OneToOneField(People, on_delete = models.CASCADE)
   BirthdayCalendar = models.DateField('Birthday', blank = False, null = False)

   class Meta:
      verbose_name = 'Birthday'
      verbose_name_plural = 'Birthdays'
   
   def __str__(self):
      return str(self.People_Birthday)

内容的提问来源于stack exchange,提问作者Diego Ordenes Vargas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:06:25