我在Django中有简单的模型:
class ClientEmail(models.Model):
client = models.ForeignKey('Client', on_delete=models.CASCADE)
email = models.EmailField('E-mail')
default_email = models.BooleanField('Default e-mail')
如何让只有一个外国人作为客户可以设置为聋人? 即使删除了一个已被设置为默认值的外国人,如何保持其中一个外国人总是嗤之以鼻?
答案 0 :(得分:0)
我是用信号做的,我不知道这是不是正确的方法,如果没有,请告诉我。
@receiver(
post_delete,
sender=ClientPhone,
dispatch_uid="keep_one_client_phone_as_deafult"
)
def keep_one_default_phone_after_delete(sender, instance, **kwargs):
phones = sender.objects.filter(client_id=instance.client_id)
if len(phones) == 0:
return
elif len(phones) == 1:
if not phones[0].default:
phones[0].default = True
phones[0].save()
return
else:
if instance.default:
sender.objects.get(client_id=instance.client_id).update(default=True)
@receiver(
post_save,
sender=ClientEmail,
dispatch_uid="keep_one_client_email_as_deafult"
)
def keep_one_default_email(sender, instance, **kwargs):
emails = sender.objects.filter(client_id=instance.client_id)
if len(emails) == 0:
return
elif len(emails) == 1:
if not emails[0].default:
emails[0].default = True
emails[0].save()
return
else:
if instance.default:
sender.objects.filter(
~Q(id=instance.id),
client_id=instance.client_id
).update(default=False)
else:
emails[0].default = True
emails[0].save()
这样在Django中使用信号的好方法吗?或者我应该扩展模型的默认保存和编辑功能?