自定义相关字段

时间:2016-05-20 11:07:36

标签: django django-rest-framework

我有一个接收并返回字符串列表的序列化程序。 这些字符串内部是模型实例。

在序列化程序中,当我收到一个新的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)

因此,如果类型存在,将返回,否则创建。我不确定这是否适合这样做,也许我应该在createupdate方法中执行此操作?

1 个答案:

答案 0 :(得分:0)

如果它有效并且没有破坏其他任何东西,那么这是正确的做法;)如果你必须这样做所有操纵模型的方法(创建,更新),那么最好在这里做,为了干燥的原因。如果没有,请在创建或更新中执行。但是如果你只需要在create上需要它,你应该在create中编写它,如果只是在更新中,那么它应该去那里。