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

如何更改django inlineformset_factory生成的表单集的外键列表?

在Django中,可以使用inlineformset_factory来生成表单集,它允许在一个表单中编辑多个相关模型的数据。如果需要更改inlineformset_factory生成的表单集的外键列表,可以通过以下步骤实现:

  1. 导入所需的模块和函数:
代码语言:txt
复制
from django.forms import inlineformset_factory
from .models import ParentModel, ChildModel
  1. 定义父模型和子模型:
代码语言:txt
复制
class ParentModel(models.Model):
    # 父模型的字段

class ChildModel(models.Model):
    parent = models.ForeignKey(ParentModel, on_delete=models.CASCADE)
    # 子模型的字段
  1. 创建表单集:
代码语言:txt
复制
ChildFormSet = inlineformset_factory(ParentModel, ChildModel, fields=('field1', 'field2'))
  1. 在视图中使用表单集:
代码语言:txt
复制
def my_view(request):
    parent_instance = ParentModel.objects.get(pk=1)
    formset = ChildFormSet(instance=parent_instance)
    # 其他处理逻辑

在上述代码中,fields参数用于指定要在表单中显示的字段。如果要更改inlineformset_factory生成的表单集的外键列表,可以通过以下步骤实现:

  1. 创建一个自定义的表单类,继承自ChildFormSet
代码语言:txt
复制
class CustomChildFormSet(ChildFormSet):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 在这里修改外键列表
        self.fields['parent'].queryset = ParentModel.objects.filter(...)
  1. 使用自定义的表单类来创建表单集:
代码语言:txt
复制
CustomChildFormSet = inlineformset_factory(ParentModel, ChildModel, formset=CustomChildFormSet, fields=('field1', 'field2'))

在自定义的表单类中,可以通过修改self.fields['parent'].queryset来更改外键列表。可以根据具体需求使用filter()方法对外键列表进行过滤。

这样,使用CustomChildFormSet生成的表单集将使用修改后的外键列表。请注意,这只是一种示例方法,具体的修改逻辑可以根据实际需求进行调整。

关于Django的inlineformset_factory和相关概念、分类、优势、应用场景以及腾讯云相关产品和产品介绍链接地址,可以参考腾讯云的文档和官方网站。

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

相关·内容

Django Form 实现多层(嵌套)模型表单

Django 中,可以通过使用 ModelForm 和 InlineFormSet 来实现多层(嵌套)模型表单。这样可以在一个表单中同时编辑主模型及其相关子模型。...下面是一个示例,演示如何实现这种多层嵌套表单。1、问题背景如何使用 Django Form 来创建涉及多个模型多层嵌套表单?...需要创建涉及多个模型表单,例如“测验-问题-答案”模型,并且每个测验包含多个问题,每个问题有多个答案。2、解决方案方法一使用 Django ModelForm 来创建各个模型表单。...方法二使用 Django InlineFormSet 和 ModelForm 来创建多层表单。InlineFormSet 可以用来创建嵌套表单,其中每个表单对应一个模型。...ModelForm 可以用来创建单个模型表单。将这些表单表单组合在一起,就可以生成一个多层表单

3510
  • django中ModelForm多表单组合解决方案

    django会有一个django.db.models.Field到django.forms.Field转换规则,此时会生成Form。...比如CreateView就会由django自动把页面上POST出form数据解析到model生成表单(或者form_calss指定ModelForm类型表单),同时调用表单save方法将数据添加到模型对应数据库表中...当然GET请求时会生成空form到页面上。可以看到,除去定义model或者form类,几行代码就可以搞定这么多事。...此时是不能save,因为project和address对应数据库记录还没有创建,所以commit传为False           contract = form.save(commit=False...#按照四条数据库记录顺序依次创建(调用save方法)、主键赋到下一条记录中、下一次记录创建(save)           projectAddress = context['projectAddressForm

    3.4K20

    Django 3.1 官网学习路线

    按照惯例,Django 会将"_id"附加到外字段名。(是的,你也可以重写这个。) 关系是通过约束来显式。...不要担心可延期部分;它告诉 PostgreSQL 在事务结束之前不要强制执行。...现在您在“更改列表”页面查看问题。此页面显示数据库中所有问题,并允许您选择一个进行更改。有“What's up?”“我们之前提出问题是: 这里需要注意是: 表单是根据问题模型自动生成。...页面的底部提供了几个选项: 保存-保存更改并返回此类型对象更改列表页。 保存并继续编辑——保存更改并重新加载此对象管理页面。 保存并添加另一个——保存更改并为这种类型对象加载一个新空白表单。...“添加选择”表单如下所示: 在该表单中,“Question”字段是一个选择框,包含数据库中每个问题。Django 知道一个应该在管理中表示为一个框。在我们例子中,目前只存在一个问题。

    8.2K10

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

    在这个表单中,Question字段是一个select选择框,包含了当前数据库中所有的Question实例。Django在admin站点中,自动地将所有的关系展示为一个select框。...在我们例子中,目前只有一个question对象存在。 请注意图中绿色加号,它连接到Question模型。每一个包含关系对象都会有这个绿色加号。...点击它,会弹出一个新增Question表单,类似Question自己添加表单。填入相关信息点击保存后,Django自动将该Question保存在数据库,并作为当前Choice关联对象。...通俗讲就是,新建一个Question并作为当前Choice。 但是,实话说,这种创建方式效率不怎么样。...当Django渲染admin/base_site.html时候,这个模板语言将被生成最终html页面,就像Part3中一样。 注意任何Django管理站点默认模板都可以重写。

    3.6K60

    Django查询优化及ajax编码格式原理解析

    与prefetch_related select_related括号内只能放字段,并且字段类型只能是一对一或一对多,内部是联表操作,会将关联表与当前表直接拼接起来,然后再执行查询操作,返回结果也是一个...queryset,列表套数据对象,该数据对象获取当前表中数据或者关联表中数据,都不会再走数据库; prefetch_related 括号内外字段全部支持,内部是子查询,返回结果也是一个queryset...request.POST中; formdata form表单发送文件必须要指定编码格式 该编码格式既可以发文件也可以发普通键值对 django后端自动识别,将内部符合urlencoded编码格式数据...,自动解析并将文件类型数据解析封装到request.FILES中 application/json ajax可以发送json格式数据,form表单不支持 #注意:数据类型和编码格式要保证一致性...,也可以发送普通键值对) 建议借助原生js内置对象帮你做数据携带 1).先生成一个内置对象 var MyFormData = new FormData(); 2).然后朝该对象内添加数据(普通键值对和文件均可

    1.6K10

    Django 2.0 新特性 转

    2.admin后台对移动端更加友好 Django最受大家欢迎admin后台,具有响应式特性,支持主流移动设备。 3.Window 表达式 新Window表达式允许为查询添加一个OVER从句。...4.小特性 django.contrib.admin后台 新ModelAdmin.autocomplete_fields属性和ModelAdmin.get_autocomplete_fields()方法现在可以在外和多对多字段上使用...django.contrib.sitemaps站点地图 为GenericSitemap构造器增加protocol参数; Cache缓存 cache.set_many()现在返回一个列表,包含了插入失败键值...QuerySet.reverse()和last()不能用于切片后查询 对切片后查询使用反转和获取最近对象操作将弹出异常,如下所示: >>> Model.objects.all()[:2].reverse...SQLite现在支持约束 另外,Django2.0还废弃和移除了一些方法和属性。 总结: 好像也没多大变化,不是重度使用者,基本感受不出变化来,该怎么用还是怎么用,^-^!

    2.6K20

    Django项目知识点(四)

    json键值对,而不是列表 request.body就是form表单数据 Queryset Django ORM用到三个类:Manager、QuerySet、Model。...file_url','file_name','title','desc','image_url').filter(is_delete= False) select_related() 如果我要拿这个模型通过绑定另外一个模型...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库中拉出到Python内存中 说白了就是我从数据库拿东西,但是有些需要字段没有,要通过绑定appmodel拿。...但是名称又是app__字段来命名,这样我要改名称,而且拿第一次model,放在python内存中,再拿通过绑定另一个model,又要执行第一次步骤,那个效率就不行了,干嘛我不一起拿,所以会用annotate...news_title=F('news__title')).filter(is_delete=False) 我要拿出image_url,news_id,和news_title,news_title来源banner模型绑定

    1.6K30

    后端框架学习-Django

    字典 分组聚合 其实是为了实现Having语句 通过计算查询结果中每一个对象所关联对象集合,从而得出总计值,为查询每一项生成聚合 QuerySet.annotate(结果变量名(别名)=聚合函数...一对一映射 创建一对一: 语法:OneToOneField(类名, on_delete=xxx(级联删除:在存在前提下删除规则)) on_delete: models.CASCADE:级联删除...创建一对一数据 无模型类,和之前相同 有模型类: wife = Wife.objects.create(name=’王夫人’,author = author1(类属性名称绑实例...)) wife = Wife.objects.create(name=’王夫人’,author_id = 1(类属性字段绑值)) 一对一查询 正向查询:从查对象 反向查询:从对象查 调用反向属性查询到关联一方...无模型类,和之前相同 有模型类: 类似上面 wife = Wife.objects.create(name=’王夫人’,author = author1(类属性名称绑实例)

    9.5K40

    django 1.8 官方文档翻译:2-1-1 模型语法

    渲染表单时使用默认HTML 部件(例如,, )。 最低限度验证需求,它被用在 Django 管理站点和自动生成表单中。...中介模型有一些限制: 中介模型必须有且只有一个到源模型(上面例子中Group),或者你必须使用ManyToManyField.through_fields 显式指定Django 应该使用。...如果你模型中存在超个一个,并且through_fields没有指定,将会触发一个无效错误。 对目标模型有相同限制(上面例子中 Person)。...Changed in Django 1.7: 在Django 1.6 及之前版本中,中介模型禁止包含多于一个。...模型实例参考 具有一个完整为模型自动生成方法 列表

    5K20

    Django相关知识点回顾

    7.3.1post表单提交数据 # 演示获取post表单提交数据 # /form/ # flask: request.form # django: requst.POST -> QueryDict类对象...无论是字典、列表或者元组元素,都需要使用 .取值,下标或者键名,不能使用 [],这是和Flask有区别的地方。...class Meta: db_table = '' 定义属性: # 表中外字段名格式: hbook = models.ForeignKey('BookInfo...() # 由多查1 多对象.属性 例:hero.hbook 2.通过模型类进行关联查询 # 查图书(一) 一类.objects.get|filter(多类名__字段__条件=值) 例:books =...查询结果缓存 使用同一个查询时,只有在第一次使用查询时会进行数据库查询操作,然后Django框架就会把查询结果存起来,下一次再使用这个查询时,使用Django之前存储结果。

    10K51

    django 1.8 官方文档翻译: 3-3-1 文件上传

    这篇文档阐述了文件如何上传到内存和硬盘,以及如何自定义默认行为。 警告 允许任意用户上传文件是存在安全隐患。更多细节请在用户上传内容中查看有关安全指导的话题。...FILES是个字典,它包含每个FileField (或者 ImageField,FileField子类)。这样的话就可以用request.FILES['file']来存放表单这些数据了。...在类Unix平台下,你可以认为Django生成了一个文件,名称类似于/tmp/tmpzfp6I6.upload。如果上传文件足够大,你可以观察到文件大小增长,由于Django向磁盘写入数据。...这些特定值 – 2.5 MB,/tmp,以及其它 – 都仅仅是”合理默认值”,它们可以自定义,这会在下一节中描述。 更改上传处理器行为 Django文件上传处理器行为由一些设置控制。...通常,这个列表会包含FILE_UPLOAD_HANDLERS提供上传处理器,但是你可以把它修改为其它列表

    72650

    django_2

    dept 部门表:主表 emp 员工表:从表 两张中有级联关系 带主键表是主表 带表是从表 关联关系放在从表 (团员找班长--> 快) sql优化 一对多模型关系: class Grade..., 如果使用选项设置某属性为主键列后, 则django不会再生成默认主键列 ·属性命名限制 ·遵循标识符规则 ·由于django查询方式,不允许使用连续下划线 库...join Grade ---g_name Student---》s_name s_grade() gf = Student.objects.filter...html控件 ·在管理站点最低限度验证 ·django会为表增加自动增长主键列,每个模型只能有一个主键列, 如果使用选项设置某属性为主键列后, 则django不会再生成默认主键列...django-admin startproject Demo django-admin startapp App / python manager.py startapp App 数据库生成和数据迁移

    3.6K30

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

    your models here. # 准备书籍列表信息模型类 class BookInfo(models.Model): # 创建字段,字段类型......def __str__(self): """定义每个数据对象显示信息""" return self.name # 准备人物列表信息模型类 class PeopleInfo...,blank是表单验证范畴 6) 在设置时,需要通过on_delete选项指明主表删除数据时,对于引用表数据如何处理,在django.db.models中包含了可选常量: CASCADE...级联,删除主表数据时连通一起删除外表中数据 PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被应用数据 SET_NULL设置为NULL,仅在该字段null=True...1)生成迁移文件 python manage.py makemigrations 2)同步到数据库中 python manage.py migrate 总结 django开发模型类和字段最好在代码里定义在迁移同步到数据库

    1.4K20

    django 1.8 官方文档翻译: 3-4-3 使用基于类视图处理表单

    为了避免这点,Django 提供一系列通用基于类视图用于表单处理。...如果给出queryset,则使用该查询模型。 模型表单提供一个form_valid() 实现,它自动保存模型。如果你有特殊需求,可以覆盖它;参见下面的例子。...注意这里我们是如何配置通用基于类视图;我们自己没有写任何逻辑: #views.py from django.views.generic.edit import CreateView, UpdateView...首先,向模型添加关联: #models.py from django.contrib.auth.models import User from django.db import models class...AJAX 示例 下面是一个简单实例,展示你可以如何实现一个表单,使它可以同时为AJAX 请求和‘普通表单POST 工作: from django.http import JsonResponse

    1.8K20

    Django 1.10中文文档-第一个应用Part2-模型和管理站点

    (你也可以重写这个行为); 按照惯例,Django会在外字段名后面添加 "_id"。(你依然可以重写这个行为); 关系由FOREIGN KEY约束显式声明。...不用在意DEFERRABLE部分;它只是告诉PostgreSQL直到事务最后再执行关联; 这些SQL语句是针对你所使用数据库定制,所以会为你自动处理某些数据库所特有的字段例如auto_increment...Django admin管理站点介绍 为您员工或客户生成管理网站用来添加,更改和删除内容是繁琐工作,不需要太多创造力。因此,Django完全自动创建模型管理界面。...这里需要注意是: 这个表单是根据Question模型文件自动生成; 模型中不同类型字段(DateTimeField、CharField)会对应相应HTML输入控件。...在页面的底部,则是一些可选项按钮: Save —— 保存更改,并返回当前类型对象变更列表界面; Save and add another:保存当前修改,并加载一个新空白的当前类型对象表单

    2.3K60
    领券