Python中文
首页
教程
问答
标签
搜索
登录
注册
Django模型形式在实例之后节省了m2m
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我对基于Django类的表单保存表单的方式有一个问题。我正在为我的一个模型使用<code>form.ModelForm</code>,它有一些多对多的关系。在</p> <p>在模型的save方法中,我检查其中一些关系的值以修改其他属性:</p> <pre><code>class MyModel(models.Model): def save(self, *args, **kwargs): if self.m2m_relationship.exists(): self.some_attribute = False super(MyModel, self).save(*args, **kwargs) </code></pre> <p>即使我在我的表单中填充了m2m关系中的一些数据,当保存模型时,我<code>self.m2m_relationship</code>,令人惊讶的是它是一个空的<code>QuerySet</code>。我最终发现了以下几点:</p> <p>调用<code>form.save()</code>方法来保存表单,它属于<code>BaseModelForm</code>类。然后这个方法返回<code>save_instance</code>,一个<code>forms\models.py</code>中的函数。此函数定义了一个局部函数<code>save_m2m()</code>,它以一种形式保存多对多关系。在</p> <p>事情是这样的,请查看<code>save_instance</code>在保存时选择的顺序以及instance和m2m:</p> ^{pr2}$ <p>显然问题就在这里。首先调用实例的<code>save</code>方法,这就是为什么<code>self.m2m_relationship</code>是空的<code>QuerySet</code>。只是还不存在。在</p> <p>我能做些什么?我不能仅仅改变<code>save_instance</code>函数中的顺序,因为它是Django的一部分,我可能会破坏其他东西。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>但是用其他方法是不可能的。在</p> <p>多对多关系不是实例上的字段,而是链接表中的一个条目。在实例本身存在之前,不可能保存该关系,因为它没有ID进入链接表。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何重塑数组、迭代列的所有行并将重塑后的数组分配给新列?Python/Pandas/Numpy
7 回答
如何重塑数组的形状?
5 回答
如何重塑文本数据以适应keras的LSTM模型
3 回答
如何重塑未对齐的数据集,并使用numpy丢弃剩余数据?
1 回答
如何重塑此数据以使用绘图
3 回答
如何重塑此数据帧?
3 回答
如何重塑此数据集以适应RNN
9 回答
如何重塑没有列的数组?
5 回答
如何重塑测试数据帧,使其维数与训练和预测工作中使用的维数相同?
9 回答
如何重塑系列以在StandardScaler中使用它
1 回答
如何重塑线性回归的数据
2 回答
如何重塑线性回归的数据?
10 回答
如何重塑表格?
9 回答
如何重塑要堆叠的重复宽数据帧?
7 回答
如何重塑输入以放入二维层?
3 回答
如何重塑输入神经网络的三通道数据集
10 回答
如何重塑这个numpy数组
1 回答
如何重塑这个numpy数组以排除“额外维度”?
2 回答
如何重塑这个numpy阵列?
10 回答
如何重塑这个数据帧
9 回答