Python Django模型-其中一个外国人设置为主要

Python Django模型-其中一个外国人设置为主要,python,django,model,Python,Django,Model,我在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') 如何使客户只有一个外国人可以设置为deafult? 如何保持其中一

我在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')
如何使客户只有一个外国人可以设置为deafult?
如何保持其中一个外国人始终设置为deafult,即使删除了这个已经设置为默认值的外国人?

我是用信号做的,我不知道这是否正确,如果不正确,请告诉我

@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中使用信号是好方法吗?或者我应该扩展model的默认保存和编辑功能吗?

您是否可以添加额外的信息,因为不清楚您的目标是什么?我希望始终将一封电子邮件设置为默认,即使当我删除当前标记为deafult时,我也希望另一部成为dafaulthow。当您删除当前默认值时,您是否决定哪一部成为默认值?其他手机中的第一部。我试图通过信号来实现这一点,可以吗?