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 status
class 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