我有一个序列化器,该序列化器创建父模型,然后根据提供给父模型的某些信息创建子模型:
class InitializeFormSerializer(serializers.Serializer):
title = serializers.CharField()
category = serializers.ChoiceField(choices=CATEGORY_TYPES)
def create(self, validated_data, user):
identifier = validated_data.get('title')
obj, created = Parent.objects.update_or_create(
user=user,
)
if created:
item_type = validated_data.get('item_type')
if item_type == 'FIRST_TYPE':
Child1.objects.create(identifier=obj)
elif item_type == 'SECOND_TYPE':
Child2.objects.create(identifier=obj)
return obj
这可行,但是item_type
的检查显得笨拙。我缺少的Django或Rest Framework中是否有一个范例可以使它变得更加优雅?
编辑:优雅,我的意思是这是非常手工的,并且扩展性不好。我想我的问题是,Django或Rest Framework是否提供了用于在父序列化器中创建子模型类型的内置方法。
答案 0 :(得分:1)
当我必须实现必须根据参数而变化的策略的方法时,我通常使用此模式。它简化了可伸缩性,因为您只需要向策略字典添加密钥(在本例中为df.to_sql(name='my table',
con = engine,
index=False,
if_exists='append')
ProgrammingError: ('42S22', "[42S22] [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid column name 'Week 2'. (207) (SQLExecDirectW); [42S22] [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid column name 'Week 2'. (207); [42S22] [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement(s) could not be prepared. (8180)")
The above exception was the direct cause of the following exception:
)。就您而言,它们是模型,但它们可以是方法,lambda或其他任何东西。
children_types
希望它有用。