我的模型甚至不保存来自 django 管理面板的数据

My model does not save data even from admin panel in django

我在模型名称顺序中创建了一个应用程序名称顺序,但是当我尝试从用户视图中保存该模型中的一些数据时,它没有保存它然后我试图保存它甚至没有保存从那里我不明白是什么导致了问题

    class BuyOrder(models.Model):
        user = models.ForeignKey(User, on_delete=models.CASCADE,)
        address = models.ForeignKey(Address, default= True, on_delete=models.CASCADE )
        status = models.IntegerField(choices = status_choices, default=1)
        method = models.CharField(max_length=50, blank=False,)
        total_price = models.FloatField(blank=False, default=0)
        payment_status = models.IntegerField(choices = payment_status_choices, default=3)
        order_id = models.CharField(unique=True, max_length=200, null=True, default=None) 
        datetime_of_payment = models.DateTimeField(default=timezone.now)
        # related to razorpay
        razorpay_order_id = models.CharField(max_length=1000, null=True, blank=True)
        razorpay_payment_id = models.CharField(max_length=1000, null=True, blank=True)
        razorpay_signature = models.CharField(max_length=1000, null=True, blank=True)
    
        def save(self, *args, **kwargs):
            if self.order_id is None and self.datetime_of_payment and self.id:
                self.order_id = self.datetime_of_payment.strftime('COOLBUYORDER%Y%m%dODR') + str(self.id)
                return super().save(*args, **kwargs)
            else:
                pass
    
        def __str__(self):
            return self.user.username + " " + str(self.order_id) + " " + str(self.id)

这是管理面板的屏幕截图,即使是他们的我也无法以该形式保存任何数据

我尝试了一切迁移零更改应用程序放置模型并删除以前的仍然不明白导致错误的原因

问题出在您的保存覆盖方法中

if self.order_id is None and self.datetime_of_payment and self.id:

这种情况永远不会发生,因为在将新对象保存到数据库的情况下,self.id 将始终是 None,因为它是从数据库自动生成的。

我认为你有 2 个选择。

  1. 添加新字段 UUID 并将其设置为主键而不是 id 2) 或者只是创建对象然后更新 order_id 您可以使用 _state.adding

    def save(self, *args, **kwargs):
                 is_adding = self._state.adding
                 super( ).save(*args, **kwargs)
                 if is_adding:
                              'add your if condition here'
                     self.save()
    

您只是忘记将要调用超级保存方法的模型传递给它。

Your code :  super().save(*args, **kwargs)

solution:  super(BuyOrder,self).save(*args, **kwargs)

否则保存方法将不知道您希望将更改应用到哪个模型。