'using' - недопустимый аргумент ключевого слова для этой функции (serializer.save (using = 'tableNew')) - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь сохранить запись в таблице (здесь выбор таблицы является динамическим).Я могу извлекать записи из уважаемой таблицы динамически.где при сохранении данных, завершившихся с ошибкой {'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 голосов
/ 12 ноября 2018

Я думаю, что вы смешиваете метод save сериализатора и метод save модели Django.И using это не настройка таблицы, а базы данных.

Я думаю, вы хотите передать using модели Джанго save.

Если вы хотите изменить базу данных: (таблицу см. Ниже)

Чтобы передать таблицу using в метод save модели, вам необходимодобавьте «дополнительный контекст» к вашему ViewSet через get_serializer_context().Должен вернуть словарь.В вашем случае

[...]

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' 

Если вы хотите установить таблицу динамически, а не база данных Я думаю, вы можете создать модель и для каждой таблицы определенную модель прокси .Затем выберите модель прокси динамически из кода.

Редактировать: если модель прокси не будет работать, вы можете попробовать с abstract

ПРИМЕЧАНИЕ. Все здесь не проверено инаписано по памяти, но это хорошая отправная точка.

...