【问题标题】:Failed to create a seller instance using django signals使用 django 信号创建卖家实例失败
【发布时间】:2022-01-08 14:21:09
【问题描述】:

我正在建立一个有 2 种用户类型的网站,但对 django 来说还是新手。 我想添加功能以在产品销售时添加产品的卖家。 很抱歉,我无法更好地解释它。 下面是 models.py 的代码:

class Ordered(models.Model):
    products = models.ForeignKey(Products, on_delete = models.SET_NULL, null = True)
    seller = models.ForeignKey(SellerProfile, on_delete = models.SET_NULL, null = True)
    buyer = models.ForeignKey(CustomerProfile, on_delete = models.CASCADE)
    ordered_on = models.DateTimeField(auto_now_add = True)

product/models.py

class Products(models.Model):
    seller = models.ForeignKey(SellerProfile, on_delete = models.CASCADE)
    title = models.CharField(max_length = 255)
    product_category = models.CharField(choices = CATEGORY_CHOICES, max_length = 100, default = 'eBooks')
    description = models.TextField()
    files = models.FileField(upload_to = 'media/product_files/', null = True)
    slug = models.SlugField(max_length = 255, unique = True, null = True, blank = True)

这是信号代码:

@receiver(post_save, sender = Ordered)
def new_order_for_seller(sender, instance, created, *args, **kwargs):
    seller = Ordered.seller.sellerprofile
    if created:
        Ordered.objects.create(seller = seller)

对代码的任何建议或更正都会非常有帮助。 谢谢

【问题讨论】:

  • yo7u可以分享你的Product模特吗?我认为它对SellerPorifle 有一个 FK,对吧?
  • 是的,产品型号对卖家资料有外键
  • 您能添加Products 模型吗?请edit提问。
  • 这个变化好吗?还是我需要提供更多代码?

标签: django django-models django-signals


【解决方案1】:

您可以将seller属性设置为instance.product.seller

@receiver(pre_save, sender = Ordered)
def new_order_for_seller(sender, instance, created, *args, **kwargs):
    if created and instance.product is not None:
        instance.seller_id = instance.product.seller_id

我们可以在pre_save 信号中执行此操作,以防止再次保存新的Ordered 对象。

话虽如此,由于卖方已经由Product 确定,因此复制它没有多大意义,因为它最终会导致ProductSeller 稍后更改的不一致,并且Ordered 仍然指向“旧”Seller

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-18
    • 2021-09-03
    • 2021-02-01
    • 1970-01-01
    • 2021-05-01
    • 2016-08-21
    • 2012-11-01
    • 2014-11-21
    相关资源
    最近更新 更多