Создание и обновление данных из API answerI в проекте Django REST (MySQ)?

У меня есть проект Django REST. У меня есть модели User, Store и Warehouse.

У меня есть модуль с парсером marketplace, который получает данные из marketplace API. В этом модуле есть класс Market и метод "get_warehouses_list". Этот метод возвращает JSON со списком складов STORE. Пример ответа:

{
"result": [
{
"warehouse_id": 1,
"name": "name1",
"is_rfbs": false
},
{
"warehouse_id": 2,
"name": "name2",
"is_rfbs": true
}
]
}

Мне нужно сделать методы создания и обновления для установки и обновления этого списка складов в моей MySQL DB (с созданием конечной точки для установки и обновления этих данных).

Я не знаю, что неправильно в моем коде, но когда я отправляю POST запрос к моей конечной точке в urls.py

router.register("", WarehouseApi, basename="warehouse")

Я получаю ошибку 400 вместо того, чтобы установить список складов в мою БД.

Мой код:

user/models.py

class User(AbstractUser):
    username = models.CharField(
        max_length=150,
        unique=True,
        null=True)
    id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        unique=True,
        editable=False)

store/models.py `

class Store(models.Model):
    user = models.ForeignKey(
        User,
        on_delete=models.PROTECT)
    name = models.CharField(max_length=128,
                            blank=True)
    type = models.PositiveSmallIntegerField(
        choices=MARKET,
        default=1,
        verbose_name="Type API") 
    api_key = models.CharField(max_length=128)
    client_id = models.CharField(max_length=128)

warehouses/models.py

class Warehouse(models.Model):
    store = models.ForeignKey(
        Store,
        on_delete=models.СASCAD, null=True)
    warehouse_id = models.BigIntegerField(
        unique = True,
        null = True)
    name = models.CharField(
        max_length=150)
    is_rfbs = models.BooleanField(default=False)

` serializers.py

`

class WarehouseSerializer(serializers.ModelSerializer):

    class Meta:
        model = Warehouse
        fields = '__all__'

    store = serializers.CharField(max_length=50)
    warehouse_id = serializers.IntegerField()
    name = serializers.CharField(max_length=100)
    is_rfbs = serializers.BooleanField()
    is_default_warehouse = serializers.BooleanField()

class WarehouseUpdateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Warehouse
        fields = ('name', 'is_rfbs',)

    def save(self, **kwargs):
        self.instance.name = self.validated_data["name"]
        self.instance.is_rfbs = self.validated_data["is_rfbs"]
        self.instance.save
        returself.instance

views.py

`

Ошибка 400 может быть вызвана рядом причин. Есть ли у вас какая-либо информация о регистрации, которую вы можете предоставить? Из журналов Python или с помощью инструментов разработчика браузера?

В вашем собственном коде вы возвращаете код 400, если данные переменной пусты. Вы уверены, что не проходите эту валидацию?

Если ничего не обнаружится, я советую вам добавить некоторые возможности обработки исключений и протоколирования в ваш собственный код, поскольку он кажется очень незащищенным, и опубликовать эту информацию здесь, если потребуется.

Вернуться на верх