ModelSerializer使用知識点_serializers.SerializerMethodField()使用シーンのまとめ
11259 ワード
serializers.SerializerMethodField , ModelSerializer , , :
1、 ModelSerializer
model :
A、Project
class Project(models.Model):
"""
"""
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50, verbose_name=' ')
version = models.CharField(max_length=50, verbose_name=' ')
description = models.CharField(max_length=1024, blank=True, null=True, verbose_name=' ')
status = models.BooleanField(default=True, verbose_name=' ')
LastUpdateTime = models.DateTimeField(auto_now=True, verbose_name=' ')
createTime = models.DateTimeField(auto_now_add=True, verbose_name=' ')
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, max_length=1024, verbose_name=' ')
def __unicode__(self):
return self.name
def __str__(self):
return self.name
class Meta:
verbose_name = ' '
verbose_name_plural = ' '
B、ApiInfo ( project )
class ApiInfo(models.Model):
"""
"""
id = models.AutoField(primary_key=True)
project = models.ForeignKey(Project, related_name='api_project', on_delete=models.CASCADE, verbose_name=' ')
def __unicode__(self):
return self.name
def __str__(self):
return self.name
class Meta:
verbose_name = ' '
verbose_name_plural = ' '
2、project ModelSerializer :
class ProjectSerializer(serializers.ModelSerializer):
"""
"""
apiCount = serializers.SerializerMethodField()
LastUpdateTime = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
createTime = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
user = serializers.CharField(source='user.first_name')
class Meta:
model = Project
fields = ('id', 'name', 'version', 'type', 'status', 'LastUpdateTime', 'createTime', 'apiCount',
'dynamicCount', 'memberCount', 'description', 'user')
def get_apiCount(self, obj):
return obj.api_project.all().count()
obj. related_name , model ( obj.api_project.all().count()、obj.api_project.get(XXX ).XXX ),
2、 ModelSerializer choice
model , choice statusclass ApiInfo(models.Model):
"""
"""
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50, verbose_name=' ')
status = models.CharField(max_length=50, verbose_name=' ', choices=API_STATUS_CHOICES)ModelSerializer :
class ApiDownLoanListSerializer(serializers.ModelSerializer):
"""
"""
status = serializers.SerializerMethodField()
def get_status(self, obj):
return obj.get_status_display()
class Meta:
model = ApiInfo
fields = ('id', 'name','status')serializers.SerializerMethodField get_status_display() choice
3、 ModelSerializer onetone
model ,AutomationCaseApi
class AutomationCaseApi(models.Model):
"""
"""
id = models.AutoField(primary_key=True)
automationTestCase = models.ForeignKey(AutomationTestCase, on_delete=models.CASCADE,
verbose_name=' ', related_name="api")
name = models.CharField(max_length=50, verbose_name=' ')
def __unicode__(self):
return self.name
def __str__(self):
return self.name
class Meta:
verbose_name = ' '
verbose_name_plural = ' 'AutomationHeadRaw, AutomationCaseApi
class AutomationHeadRaw(models.Model):
"""
json
"""
id = models.AutoField(primary_key=True)
automationCaseApi = models.OneToOneField(AutomationCaseApi, related_name='headerRaw',
on_delete=models.CASCADE, verbose_name=' ')
data = models.TextField(verbose_name=' json ', blank=True, null=True)
class Meta:
verbose_name = ' json '
verbose_name_plural = ' json 'ModelSerializer :
class AutomationCaseApiParamSerializer(serializers.ModelSerializer):
"""
"""
headerRaw = serializers.SerializerMethodField()
def get_headerRaw(self, obj):
if obj.headerRaw:
return obj.headerRaw.data
return None
class Meta:
model = AutomationCaseApi
fields = ('id', 'name', 'apiAddress', 'parameterRaw', 'responseParameterRaw', 'headerRaw')
serializers.SerializerMethodField obj.related_name choice
転載先:https://www.cnblogs.com/yoyo008/p/11586006.html