django 根据model 生成 Serializer

本文介绍了一种从Django模型自动生成序列化器的方法,通过解析模型字符串,提取类名和字段名,生成相应的ModelSerializer代码,包括create和update方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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\
      ")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值