【问题标题】:Django TypeError object of type 'ManyRelatedManager' has no len()'ManyRelatedManager' 类型的 Django TypeError 对象没有 len()
【发布时间】:2022-02-10 23:39:32
【问题描述】:

我正在尝试自定义组合对象的创建方法。字段 tag_id 应限制为 2 个 Tag 实例。我尝试过类似的东西

if len(combination.tag_id) == 2:

我得到了“ManyRelatedManager”类型的错误对象没有 len()

还有其他方法可以将此字段的最大长度设置为 2 吗?

models.py

class Combination(models.Model):

    user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True)
    gameround = models.ForeignKey(Gameround, on_delete=models.CASCADE, null=True)
    resource = models.ForeignKey(Resource, on_delete=models.CASCADE, null=True)
    tag_id = models.ManyToManyField(Tag, null=True)
    created = models.DateTimeField(editable=False)
    score = models.PositiveIntegerField(default=0)

    objects = models.Manager()

    def __str__(self):
        return str(self.tag_id) or ''

serializers.py

  def create(self, validated_data):
    user = None
    request = self.context.get("request")
    if request and hasattr(request, "user"):
      user = request.user

    score = 0
    resource_id = validated_data.get("resource")

    combination = Combination(
      user=user,
      gameround=validated_data.get("gameround"),
      resource=validated_data.get("resource"),
      created=datetime.now(),
      score=score
    )
    combination.save()

    tag_data = validated_data.pop('tag_id', None)
    for tag_item in tag_data:
      tag = Tag.objects.get_or_create(**tag_item)[0]
      combination.tag_id.add(tag)

      # if len(combination.tag_id) == 2:
    return combination

【问题讨论】:

    标签: django-rest-framework


    【解决方案1】:

    通过添加解决:

          if combination.tag_id.count() == 2:
            return combination
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2015-08-21
      • 2019-05-23
      • 2013-04-18
      • 2015-01-21
      • 2021-12-19
      • 2018-08-26
      相关资源
      最近更新 更多