Проблема с сохранением объекта в django-rest-framework

Вот мое представление, в котором я сохраняю объект Order со значениями из frontend:

@api_view(['POST'])
@permission_classes([AllowAny])
def generate_bank_transfer_order(request):
    if request.method == "POST":
        body = json.loads(request.body)

        first_name = body.get("firstName")
        last_name = body.get("lastName")
        full_name = f"{first_name} {last_name}"
        
        today = datetime.now()

        transaction_id= f'00{today.strftime("%S%M%H%d%m%y")}'
        
        code_base = body.get('code')
        try:
            code = Code.objects.get(code = code_base)
            new_order = Order(email=body.get("email"), message=body.get("message"),
                city=body.get("city"), adress=body.get("adress"), postal_code=body.get("postalCode"),
                phone=body.get("phone"), full_name=full_name, product_names=body.get("cart"),
                shipment_fee=body.get("shipmentFee"), shipment_method=body.get("shipmentMethod"),
                transaction_id=transaction_id, total_price=body.get("price"), code=code)
        
            new_order.save()
            return JsonResponse({"success":new_order.transaction_id})

        except ObjectDoesNotExist:
            new_order = Order(email=body.get("email"), message=body.get("message"),
                city=body.get("city"), adress=body.get("adress"), postal_code=body.get("postalCode"),
                phone=body.get("phone"), full_name=full_name, product_names=body.get("cart"),
                shipment_fee=body.get("shipmentFee"), shipment_method=body.get("shipmentMethod"),
                transaction_id=transaction_id, total_price=body.get("price"))
        
            new_order.save()
            return JsonResponse({"success":new_order.transaction_id})

Это моя модель заказа:

class Order(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, blank=True, null=True)
    message = models.TextField(max_length=1000, blank=True, null=True)
    email = models.EmailField(max_length=255, blank=True, null=True)
    city = models.CharField(max_length=75, default='')
    adress = models.CharField(max_length=100)
    postal_code = models.CharField(max_length=6)
    phone = models.CharField(primary_key=True, max_length=9, validators=[RegexValidator(r'^\d{9}$/')])
    full_name = models.CharField(max_length=100)
    product_names = models.TextField(max_length=5000)
    shipment_fee = models.IntegerField(default=0)
    shipment_method = models.CharField(blank=True, null=True, max_length=50)
    code = models.ForeignKey(Code, on_delete=models.SET_NULL, null=True)
    transaction_id = models.CharField(max_length=150, default=0)
    total_price = models.DecimalField(default=0, max_digits=12, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    accepted = models.BooleanField(default=False)
    shipped = models.BooleanField(default=False)

    def __str__(self):
        return f"{self.email} : {self.transaction_id}"
    
    def save(self):
        if not self.created_at:
            self.created_at = timezone.now()
        self.updated_at = timezone.now()
        return super(Order, self).save()

Этот кусок кода не идеален, но он сохраняет нужные мне данные. Проблема в том, что когда я хочу сохранить другой заказ, предыдущий заказ обновляется, а не создается следующий. Есть мысли о том, что я сделал не так?

Попробуйте передать аргументы методу сохранения, как описано в docs:

def save(self, *args, **kwargs):
    if not self.created_at:
        self.created_at = timezone.now()
    self.updated_at = timezone.now()
    super().save(*args, **kwargs)

Я бы также убрал попытки/get:

new_order = Order(email=body.get("email"), message=body.get("message"),
                  city=body.get("city"), adress=body.get("adress"), postal_code=body.get("postalCode"),
                  phone=body.get("phone"), full_name=full_name, product_names=body.get("cart"),
                  shipment_fee=body.get("shipmentFee"), shipment_method=body.get("shipmentMethod"),
                  transaction_id=transaction_id, total_price=body.get("price"))

try:
    code = Code.objects.get(code=code_base)
    new_order.code = code
except ObjectDoesNotExist:
    pass
        
new_order.save()
return JsonResponse({"success":new_order.transaction_id})
Вернуться на верх