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.Component
fields = [
'id', 'supplier_name', 'component_name', 'version', 'children',
]
depth = 1
有一个好技巧,在List的时候不显示children,在Detailde时候则显示children
class ComponentItemSerializer(serializers.ModelSerializer):
class Meta:
model = sbom_models.Component
fields = [
'id', 'supplier_name', 'component_name', 'version'
]
class ComponentSerializer(serializers.ModelSerializer):
class Meta:
model = sbom_models.Component
fields = [
'id', 'supplier_name', 'component_name', 'version', 'children',
]
depth = 1
class ComponentList(generics.ListCreateAPIView):
serializer_class = serializers.ComponentItemSerializer
queryset = models.Component.objects.all()
class ComponentDetail(generics.RetrieveAPIView):
serializer_class = serializers.ComponentSerializer
queryset = models.Component.objects.all()