为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 django rest 框架中使用外键进行计数

如何在 django rest 框架中使用外键进行计数

慕莱坞森 2021-07-01 05:21:01
这是我的models.pyclass Language(models.Model):    language_id     = models.BigAutoField(primary_key=True)    language_name   = models.CharField(max_length=255)    created_on      = models.DateTimeField(auto_now=True)    latest_build_on = models.DateTimeField(auto_now_add=True)    latest_version  = models.DecimalField(max_digits=5, decimal_places=2)    company         = models.OneToOneField('Company',on_delete=models.CASCADE,related_name='language')    def __str__(self):        return self.language_nameclass Frameworks(models.Model):    framework_id    = models.BigAutoField(primary_key=True)    framework_name  = models.CharField(max_length=255)    framework_logo  = models.FileField()    created_on      = models.DateTimeField(auto_now=True)    latest_build_on = models.DateTimeField(auto_now_add=True)    latest_version  = models.DecimalField(max_digits=5, decimal_places=2)    language        = models.ForeignKey('Language',on_delete=models.CASCADE,related_name='frameworks')    def __str__(self):        return self.framework_nameclass Technologies(models.Model):    technology_id   = models.BigAutoField(primary_key=True)    technology_name = models.CharField(max_length=255)    description     = models.TextField()    language        = models.ManyToManyField('Language',related_name='technology')    def __str__(self):         return self.technology_name这是 serializers.pyclass GetLanguageSerializer(serializers.ModelSerializer):    technology = serializers.StringRelatedField(many=True)    frameworks = serializers.StringRelatedField(many=True)    class Meta:        model = Language        fields = ('language_name','created_on','latest_build_on','latest_version','company','technology','frameworks')        depth = 1class LanguageSerializer(serializers.ModelSerializer):    class Meta:        model = Language        fields = ('language_name','created_on','latest_build_on','latest_version','company')
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

SerializerMethodField()在您的序列化程序中使用


class GetLanguageSerializer(serializers.ModelSerializer):

    technology = serializers.StringRelatedField(many=True)

    frameworks = serializers.StringRelatedField(many=True)


    total_technology = serializers.SerializerMethodField(read_only=True)

    toatl_frameworks = serializers.SerializerMethodField(read_only=True)


    def get_toatl_frameworks(self, language):

        return language.frameworks.count()


    def get_total_technology(self, language):

        return language.technology.count() # change 'technology' with corresponding "related_name" value


    class Meta:

        model = Language

        fields = (other_fileds, 'total_technology', 'toatl_frameworks')

        depth = 1


查看完整回答
反对 回复 2021-07-06
  • 1 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号