class Component(models.Model):"""组件"""component_name = models.CharField(help_text='组件的名称',max_length=32)supplier_name = models.CharField(help_text='组件的开发者/组织的名称',max_length=128, null=True, blank=True)version = models.CharField(help_text='组件的版本',max_length=128)type = models.CharField(help_text='包的类型,例如maven, npm, nuget, gem, pypi, etc.',max_length=16,)parent = models.ForeignKey(help_text='包含的子组件',to='self',on_delete=models.CASCADE,null=True,blank=True,related_name='children',)class Meta:verbose_name = '软件的组件模型'verbose_name_plural = verbose_name
class ComponentSerializer(serializers.ModelSerializer):class Meta:model = sbom_models.Componentfields = ['id', 'supplier_name', 'component_name', 'version', 'children',]depth = 1
有一个好技巧,在List的时候不显示children,在Detailde时候则显示children
class ComponentItemSerializer(serializers.ModelSerializer):class Meta:model = sbom_models.Componentfields = ['id', 'supplier_name', 'component_name', 'version']class ComponentSerializer(serializers.ModelSerializer):class Meta:model = sbom_models.Componentfields = ['id', 'supplier_name', 'component_name', 'version', 'children',]depth = 1
class ComponentList(generics.ListCreateAPIView):serializer_class = serializers.ComponentItemSerializerqueryset = models.Component.objects.all()class ComponentDetail(generics.RetrieveAPIView):serializer_class = serializers.ComponentSerializerqueryset = models.Component.objects.all()
