【问题标题】:multiple values for argument on_delete参数 on_delete 的多个值
【发布时间】:2020-09-11 07:53:47
【问题描述】:

当我运行此代码时,我收到一个类似于以下文本的错误,实际上我不知道如何修复它,因为我是新手,这里有人必须知道如何解决这个问题,正在学习教程在 YouTube 上并开始进行一些我自己的更改。

文件“C:\Users\kristian\webdevelopment\websida\ecommerce\store\models.py”,第 131 行,在 OrderItem
product = models.ForeignKey(Product_main、Product_Diverse、Product_Teknikprylar、Product_Verktyg、Product_Maskner、Product_Guldfynd、on_delete=models.SET_NULL、blank=True、null=True)
TypeError: init() 为参数 'on_delete' 获得了多个值

class Product_Diverse(models.Model):
    name = models.CharField(max_length=100, null=True)
    price = models.FloatField()
    digital = models.BooleanField(default=False, null=True, blank=False)
    image = models.ImageField(null=True, blank=True)

    def __str__(self):
        return self.name

    @property
    def imageURL(self):
        try:
            url = self.image.url
        except:
            url = ''
        return url




class Order(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, blank=True, null=True)
    date_order = models.DateTimeField(auto_now_add=True)
    complete = models.BooleanField(default=False, null=True, blank=False)
    transaction_id = models.CharField(max_length=200, null=True)

    def __str__(self):
        return str(self.id)

class OrderItem(models.Model):
    product = models.ForeignKey(Product_main, Product_Diverse, Product_Teknikprylar, Product_Verktyg, Product_Maskiner, Product_Guldfynd, on_delete=models.SET_NULL, blank=True, null=True)
    order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True)
    quantity = models.IntegerField(default=0, null=True, blank=True)
    date_added = models.DateTimeField(auto_now_add=True)

【问题讨论】:

  • 您不能像ForeignKey(Product_main, Product_Diverse, Product_Teknikpry,...) 一样创建ForeignKey。第二个参数是on_delete,不是你可以参考的多余模型。

标签: python django


【解决方案1】:

constructor of a ForeignKey object [GitHub],定义为:

    def __init__(self, to, on_delete, related_name=None, related_query_name=None,
                 limit_choices_to=None, parent_link=False, to_field=None,
                 db_constraint=True, **kwargs):

所以第二个位置参数是on_delete,第三个位置参数是related_name,以此类推

如果你写:

    product = models.ForeignKey(
        Product_main,          # to
        Product_Diverse,       # on_delete
        Product_Teknikprylar,  # related_name
        Product_Verktyg,       # related_query_name
        Product_Maskiner,      # limit_choices_to
        Product_Guldfynd,      # parent_link
        on_delete=models.SET_NULL,
        blank=True,
        null=True
    )

因此,您可以传递 on_delete 等参数的值。而不是 ForeignKey 可以引用的其他内容。

一个ForeignKey不能引用多个模型。 ForeignKey 只能引用 one 模型。您可能想要创建一个父模型Product 并使用model inheritance [Django-doc]。如果需要,您也可以使用generic relations [Django-doc],但有几个缺点(如参照完整性)。

【讨论】:

  • 通过更改为仅 ForeignKey('Ref_dModel'. model.SET_NULL, ..., ) 帮助我拥有 ForeignKey('Ref_dModel'. model.SET_NULL, ..., on_delete=model.SET_NULL)(删除 kwarg 或位置第二个 arg。
猜你喜欢
  • 1970-01-01
  • 2020-09-03
  • 2019-02-07
  • 2016-12-14
  • 2020-10-03
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多