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

Django Admin-父ModelChoiceField上的动态子ModelChoiceField查询集

Django Admin中的父ModelChoiceField上的动态子ModelChoiceField查询集是一个用于在Django管理界面中的表单字段。

在Django中,Admin是一个功能强大的管理界面,用于管理和操作后台数据。Django Admin提供了一种快速创建管理界面的方式,使开发人员能够方便地对数据库进行增删改查操作。

父ModelChoiceField是一个下拉列表字段,它是基于一个父模型的查询结果来生成可选项。动态子ModelChoiceField查询集是指在选择父模型时,根据选择的值动态地生成子模型的可选项。

这个功能在实际开发中非常有用,比如在一个电商网站中,当用户在管理界面选择了某个产品类别时,动态子ModelChoiceField查询集可以根据所选择的类别,在另一个下拉列表中显示该类别下的所有产品。

这样做的好处是可以减少用户在管理界面中的操作次数,提高用户的操作效率。同时,也可以避免用户选择了不存在的选项,保证数据的完整性和准确性。

对于这个问题,可以使用Django的Form和ModelAdmin来实现动态子ModelChoiceField查询集。具体实现步骤如下:

  1. 创建一个自定义的Form类,在其中定义父ModelChoiceField和动态子ModelChoiceField查询集。
代码语言:txt
复制
from django import forms
from django.contrib import admin
from .models import ParentModel, ChildModel

class MyForm(forms.ModelForm):
    parent_field = forms.ModelChoiceField(queryset=ParentModel.objects.all())
    child_field = forms.ModelChoiceField(queryset=ChildModel.objects.none())

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        if 'parent_field' in self.data:
            try:
                parent_id = int(self.data.get('parent_field'))
                self.fields['child_field'].queryset = ChildModel.objects.filter(parent_id=parent_id)
            except (ValueError, TypeError):
                pass

class MyModelAdmin(admin.ModelAdmin):
    form = MyForm
  1. 在自定义的ModelAdmin类中,将自定义的Form类赋值给form属性。
代码语言:txt
复制
from django.contrib import admin
from .models import MyModel
from .forms import MyForm

class MyModelAdmin(admin.ModelAdmin):
    form = MyForm

admin.site.register(MyModel, MyModelAdmin)

通过以上步骤,我们就可以在Django管理界面中使用动态子ModelChoiceField查询集了。

推荐的腾讯云相关产品和产品介绍链接地址如下:

  1. 云服务器(ECS):https://cloud.tencent.com/product/cvm
  2. 云数据库 MySQL 版(TencentDB for MySQL):https://cloud.tencent.com/product/cdb_mysql
  3. 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  4. 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  5. 云函数(SCF):https://cloud.tencent.com/product/scf
  6. 腾讯云网络安全产品:https://cloud.tencent.com/solution/security
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

动态设置djangomodel field默认值操作步骤

问题背景 djangomodel field需要动态设置默认值,具体案例如下: 原始代码如下,model是Application,其中字段ignore_fort默认值设置为False class Application...ModelChoiceField:过滤查询并将默认值设置为对象 我有一个Django Form类定义喜欢这个在Models: class AccountDetailsForm(forms.Form...adminuser = forms.ModelChoiceField(queryset=User.objects.all()) 这工作正常,但它有一些限制,我似乎不能解决: (1)我想在查询使用一个过滤器...因此,查询必须以某种方式在视图中定义,但就我可以看到它是一个必需字段在Form类。...form = AccountDetailsForm(initial={‘adminuser’:’3′}) 翻译自:这里 以上这篇动态设置djangomodel field默认值操作步骤就是小编分享给大家全部内容了

3K50
  • django form规则组件笔记(附代码)

    里面就是写对一个表规则,比如用户登录规则,对用户名密码长度进行判断 from django.forms import Form from django.forms import fields...django自己信息,我们想自定义错误信息 3 form 自定义错误信息 # 定义登录规则 class LoginForm(Form): username = fields.CharField...,可以动态生成html标签,就是根据这些属性,进行动态生成html标签 9.1 label=None label=None, 用于生成Label标签或显示内容 就是在后端form文件里面的某一个字段...,里面有这个属性,那么将这个对象返回给前端,就可以直接显示,获取方法是 动态生成标签 9.2 label_suffix=None label_suffix=None Label内容后缀...提供ModelChoiceField和ModelMultipleChoiceField字段来实现 from django import forms from django.forms import fields

    97410

    一篇文章浅析Django Form组件相关知识

    前言 在上一篇时,我们小试牛刀了以下Django Form组件使用,一篇文章带你了解Django Form组件(入门篇),没来得及小伙伴可以一起看看。但是你可能会有很多疑问,并不知道怎么使用。...并且知道Form组件功能。 生成HTML标签。 验证提交数据。 保留提交之前数据。 所以本篇就接着上次继续,来一起学习以下Django Form组件如何使用。...小总结 可以发现,我并没有写input代码,而是直接调用后端form.出来。 Form类生成Html ? 可以发现,基本和自己写Html差不多,生成id为id+。...import ModelChoiceField # 单选 ModelChoiceField(ChoiceField) queryset=None # 查询数据库中数据 empty_label...(ModelChoiceField) ... widget参数对应插件 即使字段是CharField,但是最终效果以插件为主!

    98330

    Django学习笔记之Django Form表单详解

    知识预览 构建一个表单 在Django 中构建一个表单 Django Form 类详解 使用表单模板 回到顶部 构建一个表单 假设你想在你网站上创建一个简单表单,以获得用户名字。...我们可能想使用非常复杂字段,以允许用户做类似从日历中挑选日期这样事情,等等。 这个时候,让Django 来为我们完成大部分工作是很容易。...首先,它在HTML  放置一个maxlength="100"(这样浏览器将在第一时间阻止用户输入多于这个数目的字符)。...视图 发送给Django 网站表单数据通过一个视图处理,一般和发布这个表单是同一个视图。这允许我们重用一些相同逻辑。...django.forms.models.ModelChoiceField queryset, # 查询数据库中数据 empty_label="----

    4.6K10

    Django学习之八:forms组件【对

    正如你所想,ForeignKey 和 ManyToManyField model field 类型是特殊情况(OneToOne这则不会有这样特殊情况): ForeignKey 通过django.forms.ModelChoiceField...所表示,这个实际是一个Choice Field,特殊是它choices 是一个model QuerySet 也就是一个查询queryset结果。...对于这种ModelChoiceField。在modelform对象层面和ModelChoiceField层面,进行数据绑定和数据clean()校验是不同。...form表单基本可以对应数据库中一个表一条数据。因为数据库中一个表数据可能关联到其它表数据(就是常说manyTomany,manyToone,oneToone)。...由于错误提示校验是分类,每种类型字段有哪几种校验错误,可以到官网查询https://docs.djangoproject.com/en/2.1/ref/forms/fields/#built-in-field-classes

    2.2K30

    多对多关系表创建方式、forms组件

    多对多关系表三种创建方式 1.全自动,Django自动创建 class Book(models.Model): title = models.CharField(max_length=20)...#不足:不再支持orm跨表查询,不支持正反向查询概念,不支持内置第三张表操作四个方法 3.半自动(推荐使用) 参数: through:指定第三张表关系 through_fields:指定第三张表中哪两个字段维护表与表之间多对多关系...,支持orm跨表查询 #不足:不支持add、remove、clear、set forms组件 小例子 需求:1.写一个注册页面获取用户输入用户名和密码,提交到后端之后,后端需要对用户名和密码进行校验,...方式一 from django.forms import Form from django.forms import widgets from django.forms import fields...django.forms.models.ModelChoiceField queryset, # 查询数据库中数据 empty_label="----

    5.2K00

    django orm 重点大全

    2.orm字段必须要知道一些属性 (0)null 如果为True,Django 将用NULL 来在数据库中存储空值。...如果你没有指定任何一个字段primary_key=True, Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认主键行为, 否则没必要设置任何一个字段primary_key...ModelChoiceField 中用作显示内容。...,然后再添加就比较容易了,传说中三种方式,貌似实际应用中只有save()方式可以使用,原因无他,只有save()能触发django定义一些钩子函数,留下数据更改日志信息,比较安全。...4.跨表查询一览图 #一对一查询 # 正向查询:手机号为13245作者姓名 deital_obj = models.AuthorDeital.objects.filter(tel="13245")

    79240

    Django-多对多关系三种创建方式-forms组件使用-cookie与session-08

    ,无法做扩展 纯手动:手动创建第三张表,然后利用 Foreignkey 自己做两张表关联 优点:第三张表可以新增任意字段,扩展性较高 不足:查询不方便,基于双下划线、对象反向查询都不支持了 半自动...:自己创建第三张表,利用 ManyToManyField 在某张表指定关联关系 优点:可以自定义字段,依旧支持基于双下划线、对象反向查询,可扩展性高 多对多字段方法不支持了(add,set,remove...django.forms.models.ModelChoiceField queryset, # 查询数据库中数据 empty_label="----...,浏览器上会保存一些信息,下次再访问时候,就会带着这些信息去访问服务端,服务端通过这些信息来识别出你身份 cookie 虽然是写在客户端浏览器,但其其实是服务端设置 浏览器可以选择不服从命令...session 是保存在服务端键值对 session 虽然是保存在服务器键值对,但是他是依赖于 cookie 工作(所有的保存用户状态或者各种校验基本都需要依赖于 cookie) 工作原理

    2.8K20
    领券