该
SlugRelatedField由Django的REST框架,像许多相关领域的提供,旨在与已经存在的对象使用。由于你要参考已存在的对象或需要创建的对象,因此你将无法原样使用它。
你将需要一个自定义项
SlugRelatedField,当一个不存在时创建新对象。
class CreatableSlugRelatedField(serializers.SlugRelatedField): def to_internal_value(self, data): try: return self.get_queryset().get_or_create(**{self.slug_field: data})[0] except ObjectDoesNotExist: self.fail('does_not_exist', slug_name=self.slug_field, value=smart_text(data)) except (TypeError, ValueError): self.fail('invalid')class MerchantSerializer(serializers.ModelSerializer): phones = CreateableSlugRelatedField( many=True, slug_field='phone', queryset=primitives.Phone.objects.all() ) class meta: model = Merchant fields = ( 'merchant_id', 'name', 'is_active', 'phones', )
如果切换到get_or_create,则将创建电话号码对象(如果尚不存在)。如果必须在模型上创建其他字段,则可能需要进行调整。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)