首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django admin添加表单-当日期在范围内时,通过外键限制显示的型号数量

Django admin是Django框架提供的一个强大的后台管理界面,可以方便地管理数据库中的数据。在Django admin中添加表单并限制显示的型号数量,可以通过以下步骤实现:

  1. 首先,在Django项目中创建一个新的应用(app),可以使用命令python manage.py startapp myapp来创建一个名为myapp的应用。
  2. 在myapp目录下的models.py文件中定义两个模型(Model),一个是型号(Model),另一个是日期范围(DateRange)。型号模型中包含一个外键字段,关联到日期范围模型。
代码语言:txt
复制
from django.db import models

class DateRange(models.Model):
    start_date = models.DateField()
    end_date = models.DateField()

class Model(models.Model):
    name = models.CharField(max_length=100)
    date_range = models.ForeignKey(DateRange, on_delete=models.CASCADE)
  1. 在myapp目录下的admin.py文件中注册模型,并自定义一个ModelAdmin类来控制表单的显示。
代码语言:txt
复制
from django.contrib import admin
from .models import Model, DateRange

class ModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "date_range":
            # 获取当前日期
            current_date = datetime.date.today()
            # 获取日期范围在当前日期之内的所有日期范围对象
            date_ranges = DateRange.objects.filter(start_date__lte=current_date, end_date__gte=current_date)
            # 获取这些日期范围对象对应的型号数量
            model_counts = Model.objects.filter(date_range__in=date_ranges).values('date_range').annotate(count=models.Count('id'))
            # 获取型号数量小于等于10的日期范围对象
            valid_date_ranges = [date_range for date_range in date_ranges if model_counts.get(date_range=date_range.pk)['count'] <= 10]
            # 设置外键字段的查询集为有效的日期范围对象
            kwargs["queryset"] = DateRange.objects.filter(pk__in=[date_range.pk for date_range in valid_date_ranges])
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

admin.site.register(Model, ModelAdmin)
admin.site.register(DateRange)

在上述代码中,我们重写了ModelAdmin类的formfield_for_foreignkey方法,该方法用于自定义外键字段的查询集。我们首先获取当前日期,然后根据当前日期筛选出日期范围在当前日期之内的所有日期范围对象。接着,我们通过查询型号模型中对应的日期范围对象的数量,筛选出型号数量小于等于10的日期范围对象。最后,将有效的日期范围对象设置为外键字段的查询集。

  1. 运行Django开发服务器,使用命令python manage.py runserver启动服务器。
  2. 打开浏览器,访问http://localhost:8000/admin/,进入Django admin后台管理界面。
  3. 在Django admin后台管理界面中,可以看到已注册的模型。点击Model模型,进入Model模型的列表页面。
  4. 在Model模型的列表页面中,点击"添加"按钮,进入添加型号的页面。在页面中,可以选择日期范围,但只会显示型号数量小于等于10的日期范围对象。

通过以上步骤,我们成功地在Django admin中添加了表单,并通过外键限制了显示的型号数量。这样可以确保在添加型号时,只能选择型号数量较少的日期范围对象,从而达到限制显示的目的。

推荐的腾讯云相关产品:腾讯云服务器(CVM)和腾讯云数据库(TencentDB)。腾讯云服务器提供可靠的云计算基础设施,可用于部署Django应用程序。腾讯云数据库提供高性能、可扩展的数据库服务,适用于存储和管理应用程序的数据。

腾讯云服务器产品介绍链接地址:https://cloud.tencent.com/product/cvm 腾讯云数据库产品介绍链接地址:https://cloud.tencent.com/product/cdb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

37.Django1.11.6文档

它会生成一个复杂查询并引起性能损耗,但是以后使用关系将不需要数据库查询。...Django应用程序添加到INSTALLED_APPS中,在下面描述常规位置中定义任何标签将自动模板中加载。...new_objects T0>  限制可编辑对象数量 与普通表单集一样,你可以用在modelformset_factory()中使用 extra 和 max_num 参数,来控制额外表单显示数量。...限制表单最大数量 formset_factory() max_num 参数 ,给予你限制表单集展示表单个数能力 >>> from django.forms import formset_factory...InlineModelAdmin.extra 这控制除初始形式表单集将显示额外表单数量。 有关详细信息,请参阅formsets documentation。

24.2K80

Django model 层之Models与Mysql数据库小结

tb_person verbose_name = '用户表'#表名称 #admin站点中显示名称 verbose_name_plural = verbose_name#显示复数名称 2、自动为数据库增加...第一次创建对象,自动设置field值为当前日期,所以,即便显示为该字段提供了值,也会自动忽视显示设定值。...DateField.auto_now_add 第一次创建对象,自动设置field值为当前日期,所以,即便显示为该字段提供了值,也会自动忽视显示设定值。...field值为当前日期时间,所以,即便显示为该字段提供了值,也会自动忽视显示 该field对应默认表单组件为:TextInput。...SET_NULL 删除被参照表某条表记录,设置参照表中,同待删除记录存在外关联记录列值为null。且仅设置了null=True选项可用。

2.2K20

django_2

根据属性类型确定以下信息 ·当前选择数据库支持字段类型 ·渲染管理表单使用默认html控件 ·管理站点最低限度验证 ·django会为表增加自动增长主键列,每个模型只能有一个主键列...(用多) ·对象第一次被创建自动设置当前时间, 用于创建时间戳,它总是使用当前日期,默认为false ·说明 ·该字段默认对应表单控件是一个TextInput...管理员站点添加了一个JavaScript写日历控件, 和一个“Today"快捷按钮,包含了一个额外invalid_date错误消息 ·注意 ·auto_now_add,...·属性命名限制 ·遵循标识符规则 ·由于django查询方式,不允许使用连续下划线 库 ·定义属性,需要字段类型,字段类型被定义 django.db.models.fields...false ·DateField.auto_now_add ·对象第一次被创建自动设置当前时间, 用于创建时间戳,它总是使用当前日期,默认为false ·说明

3.6K30

Django模型

站点中显示名称 注意 模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名,一般我们会通过db_table指明数据库表名。..., 参数auto_now表示每次保存对象,自动设置该字段为当前时间,用于"最后一次修改"时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示对象第一次被创建自动设置当前时间...choices参数就是从我们定义二元组(GENDER_CHOICES)中获取值。二元组第一个值会储存在数据库中,而第二个值将只会用于表单显示。...通过使用models.ForeignKey来设置,ForeignKey第一个参数是要关联模型类名,第二个参数是on_delete。...它常用值可以如下: CASCADE级联,删除主表数据连通一起删除外表中数据 PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被应用数据 SET_NULL设置为NULL

1.9K20

Django 1.10中文文档-第一个应用Part7-自定义管理站点

自定义管理表单 通过admin.site.register(Question)注册了Question后,Django可以自动构建一个默认表单。如果您需要自定义管理表单外观和功能。...你可以注册通过配置来实现。 现在先来试试重新排序表单字段。...在这个表单中,Question字段是一个select选择框,包含了当前数据库中所有的Question实例。Djangoadmin站点中,自动地将所有的关系展示为一个select框。...点击它,会弹出一个新增Question表单,类似Question自己添加表单。填入相关信息点击保存后,Django自动将该Question保存在数据库,并作为当前Choice关联对象。...进行搜索Django将在question_text字段中进行搜索。

3.6K60

Django 3.1 官网学习路线

字段还可以有各种可选参数;本例中,我们将投票默认值设置为 0。 最后,请注意使用定义了关系。这告诉 Django 每个选择都与一个问题相关。...按照惯例,Django 会将"_id"附加到外字段名。(是的,你也可以重写这个。) 关系是通过约束来显式。...不要担心可延期部分;它告诉 PostgreSQL 事务结束之前不要强制执行。...通常,您需要定制管理表单外观和工作方式。可以通过注册对象告诉 Django 所需选项来实现。 通过重新排列编辑表单字段来了解其工作原理。...“添加选择”表单如下所示: 表单中,“Question”字段是一个选择框,包含数据库中每个问题。Django 知道一个应该在管理中表示为一个框。我们例子中,目前只存在一个问题。

8.1K10

【愚公系列】2022年01月 Python教学课程 40-Django框架之模型属性详解

通过db_table指明数据库表名。 2) 关于主键 django会为表创建自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长主键列。...默认创建主键列属性为id,可以使用pk代替,pk全拼为primary key。 3) 属性命名限制 不能是python保留关键字。 不允许使用连续下划线,这是由django查询方式决定。..."时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示对象第一次被创建自动设置当前时间,用于创建时间戳,它总是使用当前日期,默认为False; 参数auto_now_add...,blank是表单验证范畴 6) 设置,需要通过on_delete选项指明主表删除数据,对于引用表数据如何处理,django.db.models中包含了可选常量: CASCADE...级联,删除主表数据连通一起删除外表中数据 PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被应用数据 SET_NULL设置为NULL,仅在该字段null=True

1.4K20

35.Django2.0文档

工作原理 服务启动Django从`` url.py`` 引导URLconf,然后执行`` admin.autodiscover()`` 语句。...3.设置字段可选  你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选。 举个例子,我们想要Author模块中email字段成为可选,即允许不填。...如果你想选择多项,你必须还要按下Ctrl。 虽然管理工具因此添加了注释(help_text),但是它有几百个选项,它依然显得笨拙。 更好办法是使用 filter_horizontal。...默认地,管理工具使用`` 下拉框`` 来展现`` `` 字段。但是,正如`` 多对多字段`` 那样,有时候你不想忍受因装载并显示这些选项而产生大量开销。...解决这个问题办法是使用`` raw_id_fields`` 选项。它是一个包含字段名称元组,它包含字段将被展现成`` 文本框`` ,而不再是`` 下拉框`` 。

11.3K100

django 1.8 官方文档翻译: 1-2-2 编写你第一个Django应用,第2部分

通过 admin.site.register(Poll) 注册了 Poll 模型,Django 就能构造一个默认 表单。通常情况下,你将要自定义管理表单外观和功能。...每个有 ForeignKey 对象关联到其他对象都会得到这个链接。 点击 “Add Another” ,你将会获得一个 “Add poll” 表单弹出窗口。...有人输入了搜索条件, Django 将搜索 question 字段。 虽然你可以使用任意数量字段,如你希望那样 – 但是因为它在后台用 LIKE 查询,为了保持数据库性能请合理使用。...添加下面这一行代码:: date_hierarchy = 'pub_date' 这会在 change list 页顶部增加了基于日期分层导航功能。 最顶层,显示所有可用年份。... Django 呈现 admin/base_site.html ,根据模板语言生成最终 HTML 页面。

2.5K40

Django模型最佳实践

通过“迁移操作”(migrate)来添加模型。 用NoSQL来应对需要降低范式级别的场景。 如果布尔类型可以为空要使用NullBooleanField。 模型中放置业务逻辑。...default 字段默认值 editable 字段在后台模型管理或ModelForm中是否显示,默认为True error_messages 设定字段抛出异常默认消息字典,其中包括null...Q对象或返回一个Q对象,用于限制后台显示哪些对象。...on_delete:关联对象被删除对应动作,可取值包括django.db.models中定义: CASCADE:级联删除。...PROTECT:抛出ProtectedError异常,阻止删除引用对象。 SET_NULL:把设置为null,null属性被设置为True才能这么做。

2.2K40

Django 学习笔记之模型高级用法(上)

通常不需要直接使用它,如果表中没有设置主键Django 将会自动添加一个自增主键。BigAutoField 其实也是一个 BigIntegerField,但它支持 ID 自动增长。...2.1 ForeignKey 1) on_delete Django 2.0 中,设置需要添加一个 on_delete选项。本身涉及到两个表数据,况且在数据库中是有约束行为。...SET_DEFAULT: 置默认值,删除时候,字段设置为默认值,所以定义时候注意加上一个默认值。 SET(): 自定义对应实体值。...2)limit_choices_to 该参数用于限制所能关联对象,只能用于 Django ModelForm(Django表单模块)和 admin 后台,对其它场合无限制功能。...4) related_name 用于关联对象反向引用模型名称。主要用于反向查询,即源模型实例通过管理器返回第一个模型所有实例。

2K30

Django教程 —— 模型类详解

: 当前选择数据库支持字段类型 渲染管理表单使用默认html控件 管理站点最低限度验证 Django 会为表创建自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后...例如:编写 Django 查询,可以使用 id or pk作为查询参数。...参数auto_now_add表示对象第一次被创建自动设置当前时间,用于创建时间戳,它总是使用当前日期,默认为false。...editable bool 类型,Admin里是否可编辑, help_text Admin 中提示帮助信息 upload_to 指文件上传到哪个位置 null 是数据库范畴概念,blank 是表单验证范畴...修改模型类之后,如果添加选项不影响表结构,则不需要重新做迁移,属性选项中 default 和blank 不影响表结构。

1.7K20

django_mysql_配置

verbose_name='逻辑删除') class Meta: db_table = 'tb_books' # 指明数据库表名 verbose_name = '图书' # admin...站点中显示名称 verbose_name_plural = verbose_name # 显示复数名称 def __str__(self): """定义每个数据对象显示信息...2) django会为表创建自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长主键列。...null是数据库范畴概念,blank是表单验证范畴 5) 一般我用CASCADE 设置,需要通过on_delete选项指明主表删除数据,对于引用表数据如何处理,django.db.models...中包含了可选常量: CASCADE 级联,删除主表数据连通一起删除外表中数据 PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被应用数据 SET_NULL

1.6K10

Django之Model操作数据库详解

Django ORM框架功能: 建立模型类和表之间对应关系,允许我们通过面向对象方式来操作数据库。 根据设计模型类生成数据库中表格。 通过方便配置就可以进行数据库切换。...) limit_choices_to=None, # Admin或ModelForm中显示关联数据,提供条件:...=2) #创建书出版社信息,其与出版社关系为一对多,所以用 publish = models.ForeignKey(Publish) #创建书出版日期...")#为作者指定Author这张表做为 book=models.ForeignKey("Book")#为书籍指定Book这张表做为 author_obj=models.Author.objects.filter...查询跨越多张表数据,QuerySet可能得到重复结果,这时候可以使用distinct()进行去重。

7K10

【云+社区年度正文】Django从入门到精通No.2----模型

1.多对一 因为是关联关系,所以我们必须指定两个类来进行相互操作,这里涉及到一个操作,即ForeignKey字段,而且要定义一方。...=None,# 反向操作,使用连接前缀,用于替换【表名】 limit_choices_to=None, # Admin或ModelForm中显示关联数据,提供条件,字典类型...db_constraint=True # 是否在数据库中创建约束 parent_link=False # Admin中是否显示关联数据 2.多对多 多对多表...,必须设中间关联表,关联表设独立主键,并引入两个“多”头主键作为关联表。...,用于替换表名 limit_choices_to=None # Admin或ModelForm中显示关联数据,提供条件,字典类型 symmetrical=None

2.1K00

django框架菜鸟教程_django框架菜鸟教程

DEBUG 调试模式,创建工程后初始值为True,即默认工作调试模式下。 作用: 修改代码文件,程序自动重启 Django程序出现异常,向前端显示详细错误追踪信息....DEBUG=False工作在生产模式Django不再对外提供静态文件,需要是用collectstatic命令来收集静态文件并交由其他静态文件服务器来提供。...default,默认值,如果变量不存在则返回默认值。 date,日期,用于对日期类型值进行字符串格式化,常用格式化字符如下: Y表示年,格式为4位,y表示两位年。...中INSTALLED_APPS列表中添加此类 4、注册模型类 # booktest/admin.py 文件中编写代码: from django.contrib import admin from booktest.models...' # 设置方法字段admin显示标题 # admin.py中: class BookInfoAdmin(admin.ModelAdmin): ...

3K40

后端框架学习-Django

重写,则按照重写效果显示 注意: 模板继承,服务器动态内容无法继承 url反向解析 代码中url位置: 1.模板 超链接 form表单 form action 将表单数据用...verbose_name:设置此字段admin界面上显示名称,可以中文化admin界面 好习惯:字段选项【添加或更改】均要执行 模型类-Meta内部类 使用Meta类来给**模型(其实就是表属性)...注意:使用伪删除,确保显示数据地方,均添加了is_active=True过滤查询。...模型管理器类 作用:为后台管理界面添加便于操作新功能 继承于django.contrib.adminModelAdmin类 应用admin.py定义模型管理器类 class XXXXManager...创建一对多数据: 语法:Foreignkey(“一”模型类, on_delete=xxx(级联删除:存在前提下删除规则)) 添加数据: 先添加“一”,再添加“多”。

9.3K40

Django admin管理工具使用、定制及源码解析

当你希望整个系统中,某个类只能出现一个实例,单例对象就能派上用场。 比如,某个服务器程序配置信息存放在一个文件中,客户端通过一个 AppConfig 类来读取配置文件信息。...list_editable 设置默认可编辑字段 list_editable = ['machine_room_id', 'temperature'] #fk_fields 设置显示字段...一般ManyToManyField多对多字段用过滤器;标题等文本字段用搜索框;日期时间用分层筛选。 过滤器如果是需要遵循这样语法:本表字段__表要显示字段。...我们也可以修改数据获取保存前数据: ? 通过change参数,可以判断是修改还是新增,同时做相应操作。上述代码就是替换磁盘时候修改状态,并写入日志。...8.修改app显示名称 DajngoAdmin后台默认显示应用名称为创建app名称。

4K40
领券