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

Django inlineformset_factory 和 ManyToMany 字段

Django inlineformset_factoryManyToMany 字段

Django 是一个高级的 Python Web 框架,用于快速开发安全、高效、可维护的网站。Django inlineformset_factory 是一个用于创建表单集合的工厂方法,允许您在同一个视图里创建相关表单。这种方法适用于具有复杂关系的多表单向、多表双向关联以及具有嵌套关系的数据模型。

ManyToMany 字段是 Django 中一个用于表示多对多关系的字段。通过使用 ManyToManyField,可以在模型之间建立一种一对多关系。这种关系通常用于实现用户与角色之间的关联、项目与标签之间的关联等场景。

以下是一个关于 Django inlineformset_factory 和 ManyToMany 字段的示例:

代码语言:python
代码运行次数:0
复制
from django.forms import ModelForm, InlineFormSet
from django.contrib.auth.models import User, Group
from django.contrib import admin
from .models import Role, Task, Tag

class RoleForm(ModelForm):
    class Meta:
        model = Role
        fields = ['name', 'label', 'permissions']

class TaskForm(ModelForm):
    class Meta:
        model = Task
        fields = ['name', 'description', 'tag_ids']
        widgets = {
            'tag_ids': ManyToManyField(Tag, widget=AdminTagWidget())
        }

class TagForm(ModelForm):
    class Meta:
        model = Tag
        fields = ['name', 'label']

InlineFormSet = inlineformset_factory(Task, TaskForm)

# 创建角色
class RoleAdmin(admin.ModelAdmin):
    form = RoleForm
    list_display = ['name', 'label', 'permissions']

# 创建任务
class TaskAdmin(admin.ModelAdmin):
    form = TaskForm
    list_display = ['name', 'description', 'tag_ids']

# 创建标签
class TagAdmin(admin.ModelAdmin):
    form = TagForm
    list_display = ['name', 'label']

admin.site.register(Role, RoleAdmin)
admin.site.register(Task, TaskAdmin)
admin.site.register(Tag, TagAdmin)

在这个示例中,我们定义了三个模型:RoleTaskTagRoleTask 模型之间建立了多对多关系,通过 ManyToMany 字段 tag_ids 实现。Tag 模型则与 Task 模型建立了一对多关系。

TaskFormTagForm 中,我们分别定义了 tag_ids 字段,并使用 AdminTagWidget 作为小部件。AdminTagWidget 是一个自定义小部件,用于在 Django 管理界面中显示标签。

最后,我们在 RoleAdminTaskAdminTagAdmin 中分别注册了模型,并定义了所需的小部件。这样,在 Django 管理界面中,您就可以分别为任务和标签提供多对多关系视图了。

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

相关·内容

Django多层嵌套ManyToMany字段ORM操作详解

在用django写项目时,遇到了许多场景,关于ORM操作获取数据的,但是不好描述出来,百度搜索关键词都不知道该怎么搜,导致一个人鼓捣了好久。...中当model设置了ordering后,使用distinct()annotate()问题记录 model类如下,我在class Meta中设置了ordering = [‘-date_create’],...即模型对象返回的记录结果集是按照这个字段排序的。...`date_create` DESC 可以看到,所得到的结果并不像我们预期的一样,之后把执行的sql输出出来可以看到在group by的时候是对host_namedate_create进行分组,原因就是因为我们在...使用distinct上面的情况类似,就不列出来了。 以上这篇Django多层嵌套ManyToMany字段ORM操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考。

1.1K10
  • python测试开发django-38.ManyToMany查询

    前言 一个学生可以对应多个老师,一个老师也可以教多个学生,这就是一种多对多的关系 models建表 新建一个老师表Teacher,一个学生表Student class Teacher(models.Model...verbose_name = "学生" verbose_name_plural = verbose_namedef __str__(self): return self.name 之后执行 makemigrations migrate...shell模式新增数据 为了调试方便,可以使用django的shell模式,对表的数据增删改查操作,打开cmd,cd到manage.py目录 python manage.py shell 多对多表的增加数据...import xadmin from .models import Card, CardDetail, Teacher, Studentclass ControlTeacher(object): # 显示的字段...list_display = ["teacher_name", "tel", "mail"]class ControlStudent(object): # 显示的字段 list_display = (

    74830

    DRF中多对多ManytoMany字段的更新和添加

    orderId 是自动生成的UUID订单的区域是外键,下单人也是外键,菜品orderMenu是一个多对多字段(其实通过我查到的方法说的都是外键字段就可以实现但是个人觉得菜品订单应该是多对多会比较好理解...)就这样给自己挖了坑因为想要在添加订单的同时也要添加对应菜品的数量于是自定义了中间表并且添加了数量字段(噩梦开始~~~)首先是定义模型类models.py# models.pyimport django.utils.timezone...as timezonefrom django.contrib.auth.models import Userfrom django.db import modelsfrom serverorders.models...retrieve 方法之前也是想只用一个序列化器来完成,但是总是会出现字段报错的情况出于无奈正好也要大佬提出这样的方法就试了一下这里 ReadOrderCenterSerializer主要就是为了自定义读取全部单个数据需要显示的内容...主要是一个思路,drf 的ModelSerializer ModelViewSet 封装的太严实了,通过这样的方法来更新和添加多对多字段实属自己技术不成熟。

    91420

    Django中ORM介绍字段及其参数

    ORM的优势   ORM解决的主要问题是对象关系的映射。 类和数据库中的表对应; 类的每个实例对应表中的一条记录; 类的每个属性对应表的中每个字段。...它包含了你存储的数据的重要字段行为。通常,一个模型(model)映射到一个数据库表, 基本情况: 每个模型都是一个Python类,它是django.db.models.Model的子类。...Django支持MySQL5.5及更高版本。  Django中ORM常用的字段参数 常用的字段 AutoField:int自增型,必须填入参数 primary_key = True 。...Django 会自动在幕后替你将列名字表名字用引号引起来。 db_tablespace 有些数据库有数据库表空间,比如Oracle。...ordering 这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。

    2.8K80

    Django基础篇-查询字段

    常用的查询 Field 的常用参数 常用的模型字段类型 ①常用的查询 获取所有记录: rs = User.objects.all() 获取第一条数据: rs = User.objects.first()...相当于是 SQL 语句中的 where 语句后面的条件,语法为“字段名__规则”: exact 相当是等于号: rs = User.objects.filter(name__exact="yuntuan...这个参数只是 Date DateTime 以及 Time 类才有的。 DateField.auto_now_add:第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值。...③常用的模型字段类型 IntegerField:整型,映射到数据库中的 int 类型。...映射到数据库中是 date 类型,在使用的时候,可以设置 DateField.auto_now 每次保存对象时,自动设置该字段为当前时间。

    1.7K30

    Django学习笔记之Queryset详解

    注意:这里只是查询Entry表,返回的a的每条记录只包含Entry表的字段值,不管Entry的model中是否有onetoone、onetomany、manytomany字段,都不会关联查询。...对于onetomany的反向manytomany,要用prefetch_related,它返回的是多条关联记录,是QuerySet。...可以使用双下划线对OneToOne、OneToMany、ManyToMany进行关联查询反向关联查询,方法与filter()中的使用方法相同。...select_related()不能用于OneToMany的反向连接,ManyToMany,这些都是model的一条记录对应关联表中的多条记录。...,它们的每个元素包含若干主表关联表的字段,不包含任何实体关联实例,这种情况要用values()values_list();第四种:返回model instance;第五种:单个值,如aggregate

    2.7K30

    如何使用 Django 更新模型字段(包括外键字段

    Django 应用程序开发中,更新模型字段是一个常见的操作,特别是涉及到外键字段的更新。...本教程将详细介绍如何通过 Django 更新模型字段,重点讨论了解决外键字段更新的方法,特别是使用 attrs 方式的实现。1. 简介Django 中的模型是应用程序中管理数据的核心部分。...这种方法尤其适用于需要频繁更新外键字段的情况,能够提升数据更新的效率性能。4....希望本教程能够帮助你理解应用 Django 中模型字段更新的技巧,提升你在开发过程中的效率和数据管理能力。在实际应用中,根据具体情况选择合适的更新方法,以确保应用程序的稳定性性能优化。6....进一步阅读Django 官方文档Django 模型字段参考Django 模型管理器与查询集通过深入学习实践,你将更加熟练地掌握 Django 中模型字段更新的技术,并能够更好地应用于实际项目中。

    21610

    Django的ORM字段类型-2

    模型类-字段选项 字段选项:指定创建的列的额外信息 允许出现多个字段选项,多个选项之间使用,隔开 primary key 如果设置为True,表示该列为主键,如果指定一个字段为主键,则此数据库不会创建...Id字段 blank 设置为True的时候,字段可以为空。...设置为False的时候字段是必须填写的 null 如果设置为True则表示该列允许为空....默认的情况下为False,如果不为空的话需要设置default来设置默认值 default 设置所在列的默认值,如果字段选项null=False的话建议添加此选项 db_index 如果设置为True表示为该列增加索引...unique 如果设置为True表示该字段在数据库中的值必须是唯一的(不能重复出现) db_column 指定列名称,如果不指定的话则采用属性名作为列名 verbose_name 设置此字段在admin

    65530

    Django中的AutoField字段使用

    补充知识:Django中models下常用Field以及字段参数 一、常见的FieldType数据库字段类型 1、AutoField:自增Field域,自动增加的一个数据库字段类型,例如id字段就可以使用该数据类型...,参数中必须填入primary_key=True 2、BigAutoField:AutoField相同,只是比AutoField要大,参数中必须填入primary_key=True 3、BigIntegerField...:大整型,只要用于存储整型的数据 4、BinaryField:主要是存储原始的二进制数据 5、BooleanField:主要是存储布尔类型的数据,01 6、CharField:主要存储字符串的数据类型...(上传文件的保存路径)/storage=None(存储组件,默认django.core.files.storage.FileSystemStorage)/width_field=None(上传图片的宽度保存的数据库字段名...:Django Admin以及ModelForm中提供验证IPV4IPV6机制 二、常用关系型数据表处理Field 1、处理一对多关系数据表:使用ForeignKey 2、处理多对多关系数据表:使用ManyToManyField

    6.5K20
    领券