Переопределить POST в CreateAPIView - PullRequest
0 голосов
/ 04 мая 2020

В моем приложении django есть две модели: Package и Address

Models.py

class Package(models.Model):

    sender_name = models.CharField(max_length=255, default=0)
    sender_company = models.CharField(max_length=255, blank=True, null=True)
    sender_phone = models.CharField(max_length=255, default=0)

    sender_city = models.CharField(max_length=255, default=0)
    sender_state = models.CharField(max_length=255, default=0)
    sender_country = models.CharField(max_length=255, default='India')


class Address(models.Model):

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=255, default=0)

    city = models.CharField(max_length=255, default=0)
    state = models.CharField(max_length=255, default=0)
    country = models.CharField(max_length=255, default='India')

Я переопределяю метод post в моем CreateAPIView как показано ниже:

class package(APIView):

    permission_classes = (permissions.IsAuthenticated,)

    def post (self, request, format=None):

        ...

        if serializer.is_valid():
            serializer.save()
            print("s data", serializer.data)

            Address.objects.create(user=request.user.id, name=request.data["name"],
                                  city = request.data["city"]...)

            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Есть ли другой способ сохранить Address из модели пакета при создании объекта Package ??

1 Ответ

0 голосов
/ 05 мая 2020

вы можете переопределить save() модели Package, чтобы создать объект Address:

Вот фрагмент кода:

class Package(models.Model):
    ...

    def save(self, *args, **kwargs):
        # save Package
        super().save(*args, **kwargs)

        try:
            address = Address(user=..., name=...)
            address.save()
        except Exception as e:
            print(e)

это только пример. Вы, вероятно, хотите проверить внутри save, что, если адрес уже существует или нет. Все зависит от логики вашего приложения c. проверьте это для более подробной информации: https://docs.djangoproject.com/en/3.0/topics/db/models/#overriding -model-Methods

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...