'using'是此函数的无效关键字参数(serializer.save(using ='tableNew'))

时间:2018-11-12 13:46:04

标签: django python-3.x api django-rest-framework

我正在尝试将记录保存在表中(此处对表的选择是动态的)。我能够从受尊重的表中动态提取记录。在保存数据时出现错误{{using“是此函数的无效关键字参数}

下面是代码。

Views.py

def create(self, request, *args, **kwargs):
    serializer = UserSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)


def perform_create(self, serializer):
    serializer.save(using='users_1')

我的Serializer.py包含

class UsersSerializer(serializers.ModelSerializer):
      class Meta:
          model = Users
          fields = ('id','firstname', 'lastname', 'mobile_number')

      def create(self, validated_data):
          return Users.objects.create(**validated_data)

1 个答案:

答案 0 :(得分:1)

我认为您正在混合序列化器的方法save和Django模型的方法saveusing不是设置表,而是数据库。

我认为您想将using传递给Django的模型save

如果要更改数据库:(有关表格,请参见下表)

要将using表传递到模型的save方法,您需要通过get_serializer_context()添加"extra context" to your ViewSet。它应该返回一个字典。就您而言

[...]

get_serializer_context(self)
    return {'using': 'users_1'}

接下来,您还需要重写模型序列化器的create()方法。

class UsersSerializer(serializers.ModelSerializer):
   [...]
   def create(self, validated_data):
      obj = JobSeekers(**validated_data)
      obj.save(using=self.context['using'])

指定表格

对于指定特定表,通常是Model.Meta的参数:

class Users(models.Model):
    class Meta:
        db_table = 'users_1' 

如果要动态设置而不是动态设置数据库,我认为您可以创建一个模型,并为每个表创建特定的proxy model。然后从代码中动态选择代理模型。

编辑:如果代理模型不起作用,则可以尝试使用abstract

注意:这里的所有内容都是未经测试的,并且是从内存中写入的,但我是一个很好的起点。