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

时间:2016-10-25 23:22:46

标签: python django django-models django-admin

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

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

models.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

1 个答案:

答案 0 :(得分:0)

您在根据我的理解进行变更之前创建产品,并且每次保存产品时,如果产品尚未具有现有变体,则为其提供“默认”变体。由于它在创建时没有任何变化,因此每个产品当然都有默认变体。 我认为你应该做的事情(如果我理解的话)是创造没有默认变化的产品。然后,当您获取给定产品的变体时,如果数据库中不存在,您将返回默认值