Python 在Django的同一视图中输出两个模型的计数

Python 在Django的同一视图中输出两个模型的计数,python,django,django-rest-framework,Python,Django,Django Rest Framework,在ModelViewSet中,我这样写: class Album(models.Model): title = models.CharField(max_length=100, blank=True, default='') price = models.FloatField() upload_time = models.DateTimeField(auto_now_add=True) class Meta: ordering = ('uploa

ModelViewSet
中,我这样写:

class Album(models.Model):
    title = models.CharField(max_length=100, blank=True, default='')
    price = models.FloatField()
    upload_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('upload_time',)

 class Status(models.Model):
    user_id = models.IntegerField()
    album_id = models.IntegerField()
    favorite = models.BooleanField(default=False)
    purchase = models.BooleanField(default=False)
    history = models.BooleanField(default=False)

    def __str__(self):
        return self.user_id

如上图所示,我需要输出每个
相册
的购买计数,例如
相册
1已购买4次,
相册
3已购买1次

但是现在,我的索引视图只生成
Album
数据模型中的字段


要实现这一点,我应该做什么,为每个
相册添加购买编号?需要您的帮助…

您可以在序列化程序类中添加类似的内容来计算它:

class index(viewsets.ModelViewSet):
    serializer_class = AlbumSerializer
    queryset = Album.objects.all()

您可以向序列化程序类中添加类似的内容以对其进行计数:

class index(viewsets.ModelViewSet):
    serializer_class = AlbumSerializer
    queryset = Album.objects.all()
  • 将相册和用户模型连接为多对多关系:

    class AlbumSerializer(serializers.ModelSerializer):
        purchase_count =  serializers.SerializerMethodField(read_only=True)
    
    
        def get_purchase_count(self, obj):
            return Status.objects.filter(album_id=obj.id, purchase=True).count()
    
    不要忘记应用迁移

  • 使用注释执行查询:

    class Status(models.Model):
        user = models.ForeignKey('userapp.User', on_delete=models.CASCADE)
        album = models.ForeignKey('albumapp.Album', on_delete=models.CASCADE)
        favorite = models.BooleanField(default=False)
        purchase = models.BooleanField(default=False)
        history = models.BooleanField(default=False)
    
  • 在属性
    purchase\u count
    favorite\u count
    history\u count
    中,您将获得相应的值

  • 将相册和用户模型连接为多对多关系:

    class AlbumSerializer(serializers.ModelSerializer):
        purchase_count =  serializers.SerializerMethodField(read_only=True)
    
    
        def get_purchase_count(self, obj):
            return Status.objects.filter(album_id=obj.id, purchase=True).count()
    
    不要忘记应用迁移

  • 使用注释执行查询:

    class Status(models.Model):
        user = models.ForeignKey('userapp.User', on_delete=models.CASCADE)
        album = models.ForeignKey('albumapp.Album', on_delete=models.CASCADE)
        favorite = models.BooleanField(default=False)
        purchase = models.BooleanField(default=False)
        history = models.BooleanField(default=False)
    
  • 在属性
    purchase\u count
    favorite\u count
    history\u count
    中,您将获得相应的值


  • 你需要在你的两个模型之间建立实际的数据库关系,否则如果可能的话,进行查询将是一场噩梦。@Sayse如果你有时间,请说得更具体一点好吗?在
    状态
    模型上存储
    相册id
    是不够的。将关系字段类型用于您的requirements@Sayse这样地?album_id=models.ForeignKey(album,on_delete=models.CASCADE,default='')然后,如何计算购买数量?你需要在你的两个型号之间建立实际的数据库关系,否则如果可能的话,进行查询将是一场噩梦。@Sayse如果你有时间,请说得更具体一些好吗?在
    状态
    型号上存储
    相册id
    是不够的。将关系字段类型用于您的requirements@Sayse这样地?album_id=models.ForeignKey(album,on_delete=models.CASCADE,default='')那么,如何计算购买数量?thx很多,如果我按照上面@Sayse的建议添加关系,我认为你应该是另一个解决方案。thx很多,如果我按照上面@Sayse的建议添加关系,我认为你应该是另一个解决方案。