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

我如何给`def formfield_for_manytomany`一个可编辑对象的id

在Django中,def formfield_for_manytomany是一个可编辑的表单字段,它允许对ManyToManyField中的多个表进行编辑。要为一个可编辑对象指定ID,可以在formfield_for_manytomany方法中返回一个IDField对象,如下所示:

代码语言:python
代码运行次数:0
复制
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.forms.models import inlineformset_factory

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['name', 'description', 'my_m2m_field']

    my_m2m_field = forms.ModelChoiceField(
        queryset=MyModel.objects.all(),
        widget=forms.Select(attrs={'id': 'my-m2m-field'})
    )

class MyModelFormSet(inlineformset_factory(MyModelForm)):
    class Meta:
        model = MyModel
        fields = ['name', 'description', 'my_m2m_field']

    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == 'my_m2m_field':
            kwargs['widget'] = forms.Select(attrs={'id': 'my-m2m-field'})
            return forms.IDField(widget=forms.HiddenInput(), required=False)
        return super().formfield_for_manytomany(db_field, request, **kwargs)

class UserForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

在上面的代码中,我们首先定义了一个MyModelForm,它继承自ModelForm,并且包含了namedescriptionmy_m2m_field这些字段。其中my_m2m_field是一个ManyToManyField,它关联了MyModelMyModel

接下来,我们定义了一个MyModelFormSet,它继承自inlineformset_factory,并且也关联了my_m2m_field。在formfield_for_manytomany方法中,我们返回了一个IDField对象,它的widget属性指定了使用Select控件,并且attrs属性指定了控件的属性。因为我们希望这个IDField对象是由Select控件来实现的,所以我们不能直接返回forms.IDField对象。

最后,我们在UserForm中使用了UserCreationForm来创建用户表单,并且在Meta属性中指定了模型和字段。在formfield_for_manytomany方法中,我们同样返回了一个IDField对象,但是与MyModelFormSet不同的是,我们没有在widget属性中指定使用Select控件,而是指定了forms.HiddenInput。这是因为在UserForm中,我们没有必要让用户选择User对象的ID,因为用户已经创建了一个User对象,我们只需要将用户对象返回即可。

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

相关·内容

我是如何编写了一个可以自动编辑新年祝福语的小程序

实现说明: 步骤一:构建一个人工智能模型才能让机器学会像人一样说话,在这里,使用python语言编写脚本,基于堆叠Transformer(神经网络中一个模块,使用自注意力机制用来实现句子中词和词的关联性...)的解码器模块构建的GPT-2模型,采用了BERT的分词器(划分句子里面的词语)构建了一个大型的深度学习模型。...BUG1.png BUG2.png 这个时候需要让计算机算法学习如何像人一样说话, 意味着要用很多数据给他训练(学习一下如何说话),我们先采用了100GB的中文语料CLUECorpus2020数据(...步骤四: 处理好后,可以看到黑框框打印出来的例子,但这个例子还不够用户友好,而且只有一个人能用,如何才能让大家也能在自己的电脑上用呢,需要把它变成一个所有人都能访问的东西。...把我们编写的人工智能程序变成了一个大家都可以访问的web服务,就是从世界各地请求它,要求他输出东西,他都能返回一个结果了。

1.4K10

django 1.8 官方文档翻译: 2-5-6 多数据库

数据库自动路由 使用多数据库最简单的方法是建立一个数据库路由模式。默认的路由模式确保对象’粘滞‘在它们原始的数据库上(例如,从foo 数据库中获取的对象将保存在同一个数据库中)。...一个例子 只是为了示例! 这个例子的目的是演示如何使用路由这个基本结构来改变数据库的使用。它有意忽略一些复杂的问题,目的是为了演示如何使用路由。...此时p没有主键,所以Django 发出一个SQL INSERT语句。这会创建一个主键,且Django 将此主键赋值给p。...如果你给数据库上某个模型提供的管理站点不想通过你的路由链指定,你将需要编写自定义的ModelAdmin类用来将管理站点导向一个特殊的数据库。...为了保持两个对象之间的关联,Django 需要知道关联对象的主键是合法的。如果主键存储在另外一个数据库上,判断一个主键的合法性不是很容易。

1.5K20
  • 【高并发】如何设计一个支撑高并发大流量的系统?这次我将设计思路分享给大家!

    作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。...写在前面 最近不少小伙伴们都在问我:高并发专题我学了不少文章了,但是如何设计一个高并发的系统我还是一脸懵逼!这个问题怎么解决呢?...其实,相信不只是问我的这些小伙伴有这个困惑,就连工作(入坑)了好几年的开发人员也都有这样的困惑:我学习了很多的高并发课程,也看了不少的高大上的文章,可就是不知道怎么去设计一个支撑高并发大流量的系统。...针对小伙伴们的疑惑,这里,我就把一些设计高并发大流量的常规思路分享给大家,不一定完全正确,设计高并发大流量系统本来就是一个仁者见仁、智者见智的事情,只要是符合自身业务场景的架构思路,都是好的架构思路,架构本身来说就是没有一个完全正确的架构...并发是指并发的访问,也就是某个时间点,有多少个访问同时到来; 通常如果一个系统的日PV在千万以上,有可能是一个高并发的系统,这里需要注意的是:只是有可能是一个高并发的系统,不一定是一个高并发的系统。

    1.1K10

    Python基础教程(十五):面向对象编程

    引言 面向对象编程(OOP)是一种广泛使用的编程范式,它强调通过“对象”来设计和实现软件。在Python中,OOP提供了一种结构化的方式来组织代码,使得代码更加模块化、可重用和易于维护。...本文将深入探讨Python中的面向对象概念,包括类、对象、继承、封装和多态性,并通过具体的案例来演示如何在实际编程中应用这些概念。...一、类和对象 在Python中,类是创建对象的蓝图,而对象则是类的实例。一个类定义了对象应该具有的属性和行为。...三、封装 封装是指隐藏对象的内部状态和实现细节,只暴露必要的接口给外部使用。这有助于保护数据的完整性和安全性。...在实际项目中,灵活运用这些概念,你将能够写出更高质量、更易于维护的代码。 结束语 喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦

    10110

    python deepcopy函数_Python deepcopy

    我并不是特别熟悉覆盖任何Python的内置对象,但我对我想要的东西有所了解....让我们创建一个使用SQLA映射的非常简单的类User. class User(object): def __init__(self, user_id=None, name=None): self.user_id...问题 只要那些是唯一的,在定义__deepcopy__时我会如何忽略它? 此外,SQLA是否有任何属性注入映射对象?...(我在之前的一个问题中问了这个问题(虽然我选择了一个主要问题的答案后几天作为编辑),但我想我错过了那里的火车.为此道歉.)...编辑 – 修复代码感谢zifot的回答 我从Python文档中得到的唯一一件事就是你需要用memo定义deepcopy作为额外的参数.经过几十年的挖掘,我尝试了这个: def __deepcopy__(

    25630

    你与数据科学家只差这26条python技巧

    JEDI Jedi库是一个代码自动补齐和静态分析的库。它可以使你更快更高效地书写代码。 除非你在开发自己的编辑器,否则你可能会非常喜欢将Jedi作为自己的编辑插件。...它会返回一个map对象,这个对象可以被转化成可迭代对象,如列表或者元组。...最后,优先队列可以让你根据他们排序的顺序进行检索。 _REPR_ 当你定义一个类的时候,提供一个方法可以返回用来表示该类对象的可打印字符串会非常有用。...它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。 VRITUAL ENVIRONMENTS 这可能是我最喜欢的Python技巧了。...keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals)) 内置函数zip()接收若干可迭代对象,然后返回一个由多个元组组成的列表

    46510

    python基础面试题整理---从零开始 每天十题(03)

    还有我们的None类型,我们也来看一下。None是一个特殊的常量,“不同的”None的id是一样的。...A:Python中有可变对象和不可变对象之分。可变对象创建后可改变但地址不会改变,即变量指向的还是原来的变量;不可变对象创建之后便不能改变,如果改变则会指向一个新的对象。    ...Python中dict、list是可变对象,str、int、tuple、float是不可变对象。 六、Q:列表和元组有什么区别?   A:列表是可变的,即可以编辑。...的generator function    这些可以直接作用于for 循环的对象统称为可迭代对象:Iterable 可以使用isinstance()判断一个对象是否为可Iterable...对象     总结:凡是可作用于for循环的对象都是Iterable类型;        凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

    32520

    Django form.save 方法的详细分析

    在本文中,我们将详细分析 Form 的 save 方法是如何工作的。我们将通过一个示例来展示 save 方法的各个步骤,并解释为什么我们需要调用 super 在这个方法上。...2、解决方案2.1 示例假设我们有一个添加/编辑产品的表单(其中字段 user 是外键,指向我们的 User 模型),并将其作为两个独立视图函数的触发器 - add / edit:def product_add...save 方法是如何工作的:self.instance.user = user:这行代码将 user 参数保存到 self.instance 对象的 user 属性中。...如果我们不调用 super,那么 save 方法就不会保存对象,而只是返回一个未保存的对象。2.4 编辑和保存新产品时的区别当我们编辑和保存新产品时,save 方法的调用方式是一样的。...然而,在编辑产品时,我们还需要传递一个 instance 参数给表单,以便 save 方法知道要更新哪个对象。

    15210

    Scalaz(15)- Monad:依赖注入-Reader besides Cake

    所谓依赖注入是指在编程时使用了某个未知实现细节的对象,但依赖注入确保这个对象在这段程序运行时已经实例化。这种需求通常是在大型软件开发时对项目进行模块化分割后虽然模块之间互有依赖,但又可以同步开发。...我们下面通过一个实际例子来示范Cake Pattern和Monad Reader是如何实现依赖注入的: 我们来模拟一个咖啡机开关场景:有一个电炉,可开(on)可关(off)。...} 在整体设计时把功能要求用trait表述并分享给所有开发人员。...这里的设计目标有“可开关电炉”和“咖啡机感应设备” 假设由我负责这个咖啡机开关编程。不过我并不知道如何开启电炉,也不知道如何确定咖啡有否,因为这些功能可能还没开发出来呢。...当然,如果还有另一个版本的实现程序: 1 trait PotHasCoffee extends SensorDevice { 2 def isCoffeePresent = true 3

    66670

    使用Python+Flask开发博客项目,并实现内网穿透

    并教你如何通过使用内网穿透工具处理项目,让本地的项目可以在公网访问!...Flask的启动入口更加的简洁,我对启动模块的代码进行了封装操作。...,其实还有很多的功能小伙伴们可以根据自己的需求添加,这也是Flask极具特色的一个地方,这里要说明的一点是,由于前端部分的代码太多啦,这里就不展示出来了,需要的小伙伴可以私聊我拿到整体的代码哟。...但是服务器的成本较高,而且部署的过程也比较繁杂,那么有没有什么好的方式可以帮我们实现本地的服务id映射到公网访问呢?答案就是内网穿透 这里给大家介绍一个快捷的内网穿透工具,花生壳。...下载好之后我们只需要把我们本机的ip输入进去,他就会帮我们生成一个域名,实现公网可访问,如下图。

    63830

    你与数据科学家只差这26条python技巧

    JEDI Jedi库是一个代码自动补齐和静态分析的库。它可以使你更快更高效地书写代码。 除非你在开发自己的编辑器,否则你可能会非常喜欢将Jedi作为自己的编辑插件。...它会返回一个map对象,这个对象可以被转化成可迭代对象,如列表或者元组。...最后,优先队列可以让你根据他们排序的顺序进行检索。 _REPR_ 当你定义一个类的时候,提供一个方法可以返回用来表示该类对象的可打印字符串会非常有用。...它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。 VRITUAL ENVIRONMENTS 这可能是我最喜欢的Python技巧了。...keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals)) 内置函数zip()接收若干可迭代对象,然后返回一个由多个元组组成的列表

    43620

    你与数据科学家只差这 26 条 Python 技巧

    JEDI Jedi 库是一个代码自动补齐和静态分析的库。它可以使你更快更高效地书写代码。 除非你在开发自己的编辑器,否则你可能会非常喜欢将 Jedi 作为自己的编辑插件。...它会返回一个 map 对象,这个对象可以被转化成可迭代对象,如列表或者元组。...最后,优先队列可以让你根据他们排序的顺序进行检索。 _REPR_ 当你定义一个类的时候,提供一个方法可以返回用来表示该类对象的可打印字符串会非常有用。...它通过 MAC 地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。 VRITUAL ENVIRONMENTS 这可能是我最喜欢的 Python技巧 了。...keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals)) 内置函数 zip() 接收若干可迭代对象,然后返回一个由多个元组组成的列表

    55220

    这几个Python的奇淫技巧,你会么?

    JEDI Jedi 库是一个代码自动补齐和静态分析的库。它可以使你更快更高效地书写代码。 除非你在开发自己的编辑器,否则你可能会非常喜欢将 Jedi 作为自己的编辑插件。...它会返回一个 map 对象,这个对象可以被转化成可迭代对象,如列表或者元组。...最后,优先队列可以让你根据他们排序的顺序进行检索。 __repr__ 当你定义一个类的时候,提供一个方法可以返回用来表示该类对象的可打印字符串会非常有用。...它通过 MAC 地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。 VRITUAL ENVIRONMENTS 这可能是我最喜欢的 Python技巧 了。...keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals)) 内置函数 zip() 接收若干可迭代对象,然后返回一个由多个元组组成的列表

    31720

    一些日常使用的 Python 技巧分享

    JEDI Jedi 库是一个代码自动补齐和静态分析的库。它可以使你更快更高效地书写代码。 除非你在开发自己的编辑器,否则你可能会非常喜欢将 Jedi 作为自己的编辑插件。...它会返回一个 map 对象,这个对象可以被转化成可迭代对象,如列表或者元组。...最后,优先队列可以让你根据他们排序的顺序进行检索。 __repr__ 当你定义一个类的时候,提供一个方法可以返回用来表示该类对象的可打印字符串会非常有用。...它通过 MAC 地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。 VRITUAL ENVIRONMENTS 这可能是我最喜欢的 Python技巧 了。...keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals)) 内置函数 zip() 接收若干可迭代对象,然后返回一个由多个元组组成的列表

    42630

    你与数据科学家只差这26条python技巧

    JEDI Jedi库是一个代码自动补齐和静态分析的库。它可以使你更快更高效地书写代码。 除非你在开发自己的编辑器,否则你可能会非常喜欢将Jedi作为自己的编辑插件。...它会返回一个map对象,这个对象可以被转化成可迭代对象,如列表或者元组。...最后,优先队列可以让你根据他们排序的顺序进行检索。 _REPR_ 当你定义一个类的时候,提供一个方法可以返回用来表示该类对象的可打印字符串会非常有用。...它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。 VRITUAL ENVIRONMENTS 这可能是我最喜欢的Python技巧了。...keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals)) 内置函数zip()接收若干可迭代对象,然后返回一个由多个元组组成的列表

    51930

    Python 奇淫技巧!

    JEDI Jedi 库是一个代码自动补齐和静态分析的库。它可以使你更快更高效地书写代码。 除非你在开发自己的编辑器,否则你可能会非常喜欢将 Jedi 作为自己的编辑插件。...它会返回一个 map 对象,这个对象可以被转化成可迭代对象,如列表或者元组。...最后,优先队列可以让你根据他们排序的顺序进行检索。 __repr__ 当你定义一个类的时候,提供一个方法可以返回用来表示该类对象的可打印字符串会非常有用。...它通过 MAC 地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。 VRITUAL ENVIRONMENTS 这可能是我最喜欢的 Python技巧 了。...keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals)) 内置函数 zip() 接收若干可迭代对象,然后返回一个由多个元组组成的列表

    44520
    领券