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的建议添加关系,我认为你应该是另一个解决方案。