drf序列化枚举了类字段
drf序列化外建关联字段
models.py
class ChargePolicyDetail(models.Model):
PURPOSE = c_models.Apartment.PURPOSE
CATEGORY = c_models.Apartment.CATEGORY
name = models.CharField(
max_length=30,
blank=True,
null=True,
verbose_name="收费明细"
)
effect_start_date = models.DateField(
default=datetime.date.today(),
blank=True, null=True,
verbose_name="生效开始时间")
effect_end_date = models.DateField(
blank=True, null=True,
verbose_name="生效结束时间")
# 过滤项
purposes = models.CharField(
max_length=30,
choices=PURPOSE,
blank=True,
null=True,
verbose_name="建筑用途")
category = models.CharField(
max_length=30,
choices=CATEGORY,
blank=True,
null=True,
verbose_name="户型")
has_evl = models.BooleanField(
blank=True,
null=True,
verbose_name="有无电梯"
)
property_rights = models.CharField(
max_length=30,
blank=True,
null=True,
choices=(("0", "民用"), ("1", "公用")),
verbose_name="产权性质"
)
formula = models.CharField(
max_length=30,
blank=True,
null=True,
verbose_name="计算公式"
)
cycle = models.CharField(
max_length=8,
choices=(
("1", "每年"),
("2", "每半年"),
("3", "每月"),
),
blank=True,
null=True,
verbose_name="生成周期"
)
charge_policy = models.ForeignKey(
to=ChargePolicy,
blank=True,
null=True,
on_delete=models.CASCADE,
verbose_name="对应收费规则")
policy = models.ForeignKey(
to=ChargeCategory,
blank=True, null=True,
on_delete=models.CASCADE,
verbose_name="对应规则类目"
)
updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")
created_at = models.DateTimeField(
default=timezone.now,
editable=False,
blank=True,
null=True,
verbose_name="创建时间")
class Meta:
verbose_name = "收费规则"
class ChargeCategory(models.Model):
name = models.CharField(max_length=16, blank=True, null=True, unique=True, verbose_name="类目名称")
serializers.py
class ChargePolicyDetailSerializer(serializers.ModelSerializer):
"""收费规则明细序列化"""
policy = serializers.CharField(source="policy.name")
purposes = serializers.CharField(source='get_purposes_display')
category = serializers.CharField(source='get_category_display')
property_rights = serializers.CharField(source='get_property_rights_display')
cycle = serializers.CharField(source='get_cycle_display')
class Meta:
model = models.ChargePolicyDetail
exclude = ("updated_at", "created_at")