python - 如何检查一个对象是否有超过恒定数量的多对多字段对象
问题描述
我有 2 个表说“A”和“B”与表“A”的一个字段具有多对多关系,我创建了一个模型管理员,我从这里创建两个表对象。
我有一个约束,我必须为每个字段(关系)创建恒定数量的“B”对象
我写了下面的代码,但它给出了一个错误:
ValueError: “needs to have a value for field ”id“ before this many-to-many relationship can be used
count = 10
class A(models.Model):
field_a = models.CharField(max_length=100)
class B(models.Model):
field_b = models.CharField(max_length=100)
fields = models.ManyToManyField(A, related_name="bs")
def save(*args, **kwargs):
for item in self.fields.all():
if item.bs.count() > count:
raise ValidationError(
"item count is exeeded"
)
return super(B, self).save(*args, **kwargs)
请建议如何处理这种情况。
解决方案
在这种情况下,您从关系的错误方面调用related_name。要使用相关名称,您可以这样做A.bs.all()
,这将是关系中所有 B 的列表。要调用其他方式,您需要更改item.bs.count()
为item.A_set.count()
推荐阅读
- python - 根据百分位数过滤大型数据框的最有效方法
- php - 打开电子邮件跟踪而不更新它两次
- javascript - 创建子对象类时,原型属性中包含方法的原因是什么?
- ios - (线程 1:致命错误)如果没有从 firebase 检索到数据,如何使 UIButton 停止工作
- c++ - clang:错误:链接器命令在 cmake 中链接库时失败,退出代码为 1(使用 -v 查看调用)
- ruby-on-rails - Selenium Webdriver ruby 升级(write_timeout 错误)
- pyspark - PySpark:将一列正数设为负数
- javascript - 如何更改 FlatList react-native 中每个列表项的不同颜色
- php - 是否可以使用 SSL 但没有客户端证书将 PHP PDO 连接到远程 MySQL
- symfony - Symfony4,如何正确处理缺少的表单字段?(在 $this->propertyAccessor->setValue 中无一例外)