mat/backend/apps/material/serializers.py

55 lines
2.7 KiB
Python

from rest_framework import serializers
from .models import Material
class MaterialSerializer(serializers.ModelSerializer):
"""
材料序列化器
"""
factory_name = serializers.CharField(source='factory.factory_name', read_only=True)
factory_short_name = serializers.CharField(source='factory.factory_short_name', read_only=True)
major_category_display = serializers.CharField(source='get_major_category_display', read_only=True)
replace_type_display = serializers.CharField(source='get_replace_type_display', read_only=True)
advantage_display = serializers.CharField(source='get_advantage_display', read_only=True)
application_scene_display = serializers.CharField(source='get_application_scene_display', read_only=True)
brochure_url = serializers.SerializerMethodField()
class Meta:
model = Material
fields = ['id', 'name', 'major_category', 'major_category_display',
'material_category', 'material_subcategory', 'spec', 'standard',
'application_scene', 'application_scene_display', 'application_desc',
'replace_type', 'replace_type_display', 'advantage', 'advantage_display',
'advantage_desc', 'cost_compare', 'cost_desc', 'cases', 'brochure',
'brochure_url', 'quality_level', 'durability_level', 'eco_level',
'carbon_level', 'score_level', 'connection_method', 'construction_method',
'limit_condition', 'factory', 'factory_name', 'factory_short_name',
'status', 'created_at', 'updated_at']
read_only_fields = ['id', 'created_at', 'updated_at']
def get_brochure_url(self, obj):
"""
获取宣传页图片URL
"""
if obj.brochure:
request = self.context.get('request')
if request:
return request.build_absolute_uri(obj.brochure.url)
return None
class MaterialListSerializer(serializers.ModelSerializer):
"""
材料列表序列化器(简化版)
"""
factory_name = serializers.CharField(source='factory.factory_name', read_only=True)
factory_short_name = serializers.CharField(source='factory.factory_short_name', read_only=True)
major_category_display = serializers.CharField(source='get_major_category_display', read_only=True)
status_display = serializers.CharField(source='get_status_display', read_only=True)
class Meta:
model = Material
fields = ['id', 'name', 'major_category', 'major_category_display',
'material_category', 'material_subcategory', 'factory',
'factory_name', 'factory_short_name', 'status', 'status_display']