我正在尝试将记录保存在表中(此处对表的选择是动态的)。我能够从受尊重的表中动态提取记录。在保存数据时出现错误{{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)
答案 0 :(得分:1)
我认为您正在混合序列化器的方法save
和Django模型的方法save
。 using
不是设置表,而是数据库。
我认为您想将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
注意:这里的所有内容都是未经测试的,并且是从内存中写入的,但我是一个很好的起点。