我有一个订单模型和其他与之相关的模型。用户可以删除这些项目中的任何一个,我必须检查删除后订单是否为空,如果为真,则设置为active False。一些基本的代码来说明它
class Order(models.Model):
paid = models.BooleanField(default=False)
active = models.BooleanField(default=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
def empty_order():
"""
I must implement it
"""
class HomeOrder(models.Model):
...
order = models.OneToOneField(Order, related_name='primary_home')
class TourOrder(models.Model):
...
order = models.ForeignKey(Order, related_name='tours')
我有一个post\u delete signals,它连接到与订单相关的每个模型:
post_delete.connect(delete_order_if_empty, sender=HomeOrder)
post_delete.connect(delete_order_if_empty, sender=TourOrder)
def delete_order_if_empty(sender, instance, **kwargs):
if instance.order.empty_order():
instance.order.active = False
instance.order.save()
一个订单可以有一个家,所以如果家存在,我可以做order.primary\u主页如果家不存在,它将引发AttributeError,因为它是一个OneToOne关系。你知道吗
一个订单可以有很多行程,所以在空订单方法中,我想做如下检查。你知道吗
def empty_order():
home = hasattr(self, 'primary_home') # Avoid AttributeError exception
tours = self.tours.exists()
this_order_has_something = primary_home or tours
return not this_order_has_something
现在,当我删除一个同胚序时,信号被触发,但是空的方法从未意识到这个同胚序不再存在。示例:
>>>o=Order.objects.create(...)
>>>o.primary_home # raise AttributeError
>>>h=HomeOrder.objetcs.create(order=o, ...)
>>>o.primary_home # <HomeOrder: home-xx>
>>>h.delete()
>>>o.primary_home # still <HomeOrder: home-xx> Why?
>>>o.refresh_from_db()
>>>o.primary_home # again <HomeOrder: home-xx>
目前没有回答
相关问题 更多 >
编程相关推荐