【问题标题】:My model does not save data even from admin panel in django即使从 django 的管理面板,我的模型也不保存数据
【发布时间】:2021-08-14 13:18:15
【问题描述】:

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

    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)

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

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

【问题讨论】:

    标签: django django-models django-views django-forms django-templates


    【解决方案1】:

    问题在于您的保存覆盖方法

    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()
      

    【讨论】:

    • 那么我如何为每个订单生成一个随机订单 ID
    • 我会把它添加到答案中。
    【解决方案2】:

    您只是忘记传递您希望调用超级保存方法的模型。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 2015-10-13
      • 2010-10-19
      • 2014-11-24
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多