django 根据model 生成 Serializer

import re


model_str = '''
class Type(models.Model):
    name = models.CharField('类型名称', max_length=100)

    def __str__(self):
        return "%s" % self.name

    def natural_key(self):
        return (self.name)
'''
class_name = ''
col_name_list = []
model_str_list = model_str.split(':')
# print(model_str_list[0])
temp_class =  model_str_list[0]
matchObj = re.match( r".*class (.*)\(models.Model", model_str, re.M|re.I|re.S)
if matchObj:
    print(matchObj.group(1))
    class_name = matchObj.group(1)
else:
    print("not found")

# print(model_str_list[1])
row_list = model_str_list[1].split("\n")
for _ in row_list:
    if "=" in _:
        # print(_)  = models.
        matchObj = re.match(r"(.*) = models\.", _, re.M | re.I | re.S)
        if matchObj:
            print(matchObj.group(1))
            col_name_list.append(matchObj.group(1).replace(' ',''))

fields_str =  "("
update_str = ""
for _ in col_name_list:
    update_str += "instance." + _ + " = validated_data.get(\'" + _ + "\',instance." + _ + ")\n\t\t"
    if fields_str[-1] == '(':
        fields_str += "\'"+ _ +"\'"

    else:
        fields_str += ",\'" + _ + "\'"

fields_str+= ')'
# -----------------------------   start -------------------------------------------
print('-----------------------------   start -------------------------------------------')
print('-----------------------------   start -------------------------------------------')
print('class '+ class_name +'Serializer(serializers.ModelSerializer):')
print("\
    class Meta:\n\
        model =  "+ class_name +"#\n\
        fields = "+ fields_str )
print("\n\
    def create(self,validated_data):\n\
        #传入验证过的数据, 创建并返回`"+class_name+"`实例。\n\
        return "+ class_name +".objects.create(**validated_data)\n\
      ")

print("\n\
    def update(self,instance,validated_data):\n\
        #传入验证过的数据, 更新并返回已有的`"+ class_name +"`实例。\n\
        "+ update_str +
        "instance.save()\n\t\t\
        return instance\n\
      ")

猜你喜欢

转载自blog.csdn.net/countofdane/article/details/84027944
今日推荐