我有一个接收并返回字符串列表的序列化程序。 这些字符串内部是模型实例。
在序列化程序中,当我收到一个新的types
列表时,我要检查该类型是否存在,如果存在,则将其与另一个模型相关联,否则创建一个新实例并将其关联。
我可以使用自定义RelatedField
class TypeRelatedField(serializers.StringRelatedField):
def to_internal_value(self, data):
try:
return Type.objects.get(name=data)
except Type.DoesNotExist:
return Type.objects.create(name=data)
并在接收类型列表
的序列化程序中types = TypeRelatedField(many=True, required=False)
因此,如果类型存在,将返回,否则创建。我不确定这是否适合这样做,也许我应该在create
和update
方法中执行此操作?
答案 0 :(得分:0)
如果它有效并且没有破坏其他任何东西,那么这是正确的做法;)如果你必须这样做所有操纵模型的方法(创建,更新),那么最好在这里做,为了干燥的原因。如果没有,请在创建或更新中执行。但是如果你只需要在create上需要它,你应该在create中编写它,如果只是在更新中,那么它应该去那里。