Django:使用post_save和Admin Inlin创建默认值

2024-04-27 20:08:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个对象,ProductVariationVariation在product表中定义为ForeignKey。我想为Variation设置一个默认值,如果不使用Variation值创建Product Object,则将使用该值。如果产品是用Variation值创建的,它不应该使用默认值。在

但是当我运行下面的代码时,它总是使用默认值Variation创建一个对象。在

模型.py

class Variation(models.Model):
    product = models.ForeignKey(Product)
    ...

def product_post_saved_receiver(sender, instance, created, *args, **kwargs):
    product = instance
    variations = product.variation_set.all()
    if variations.count() == 0:
        new_var = Variation()
        new_var.product = product
        new_var.title = "Default"
        new_var.price = product.price
        new_var.save()

post_save.connect(product_post_saved_receiver, sender=Product)

我试图得到这个输出:

  • MacBook Pro-默认
  • iPhone 7-16 GB,32 GB

相反,它返回以下输出:

  • Macbook Pro-默认
  • iPhone 7-默认,16 GB,32 GB

Tags: 对象instancenewmodelsvarproductpostsender
1条回答
网友
1楼 · 发布于 2024-04-27 20:08:15

根据我的理解,您是在变体之前创建产品的,每次保存产品时,如果它还没有现有的变体,您就给它一个“默认”变体。因为它在创建时没有任何变化,当然每个产品都有默认的变体。 我认为你应该做的是(如果我理解正确的话)创建没有默认变化的产品。然后,当您获取给定产品的变体时,如果数据库中不存在,您将返回一个默认的变体

相关问题 更多 >