首页 > 解决方案 > 如何检查一个对象是否有超过恒定数量的多对多字段对象

问题描述

我有 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)

请建议如何处理这种情况。

标签: pythondjango

解决方案


在这种情况下,您从关系的错误方面调用related_name。要使用相关名称,您可以这样做A.bs.all(),这将是关系中所有 B 的列表。要调用其他方式,您需要更改item.bs.count()item.A_set.count()


推荐阅读