Создание и обновление данных из 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, если данные переменной пусты. Вы уверены, что не проходите эту валидацию?
Если ничего не обнаружится, я советую вам добавить некоторые возможности обработки исключений и протоколирования в ваш собственный код, поскольку он кажется очень незащищенным, и опубликовать эту информацию здесь, если потребуется.