【发布时间】:2021-05-30 09:53:28
【问题描述】:
所以我的应用中有这些模型:
from django.db import models
from accounts.models import Vendedor
class Comissao(models.Model):
porcentagem = models.FloatField()
def __str__(self):
return str(self.porcentagem)
class Venda(models.Model):
vendedor = models.ForeignKey(Vendedor, on_delete=models.DO_NOTHING)
comissao_venda = models.ForeignKey(Comissao, on_delete=models.DO_NOTHING)
data_venda = models.DateField(auto_now_add=True)
valor_venda = models.FloatField()
descricao_venda = models.CharField(max_length=60)
@property
def valor_a_receber(self):
return self.comissao_venda.porcentagem * self.valor_venda
def __str__(self):
return str(self.vendedor)
我的问题是当我尝试删除 Comissao 对象时,我收到了这个错误:
FOREIGN KEY constraint failed
我已经被这个错误困了几个小时,希望有人能帮助我...XD
【问题讨论】:
-
这是由于
DO_NOTHING:ForeignKeys 在数据库级别强制执行:这意味着commissao_venda需要引用有效的Comissao,但如果您删除Commisao,则不再是这种情况,因此数据库拒绝此。 -
那我该怎么办我已经尝试使用
models.SET_DEFAULT并在porcentagem字段中设置默认值0,但我也收到此错误:sales.Venda.comissao_venda: (fields.E321) Field specifies on_delete=SET_DEFAULT, but has no default value. HINT: Set a default value, or change the on_delete rule. -
正如错误所说,您需要设置一个默认值。你是如何设置默认值的?
-
这是我在
ForeignKey中所做的,但我仍然收到错误消息...:comissao_venda = models.ForeignKey(Comissao, on_delete=models.SET_DEFAULT, default=0) -
您可能应该首先设置
default=0,然后迁移,然后将on_delete=设置为SET_DEFAULT。
标签: django model foreign-keys