首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django模型-外国人中的一位

Django模型-外国人中的一位
EN

Stack Overflow用户
提问于 2016-01-25 15:43:20
回答 1查看 33关注 0票数 0

我在Django中有一个简单的模型:

代码语言:javascript
运行
复制
class ClientEmail(models.Model):
    client = models.ForeignKey('Client', on_delete=models.CASCADE)
    email = models.EmailField('E-mail')
    default_email = models.BooleanField('Default e-mail')

如何使只有一个外国人为客户可以设置为耳聋?如何将外国人中的一人永远设置为耳聋,即使删除了这个已经设置为默认的耳聋?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-26 08:13:47

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

代码语言:javascript
运行
复制
@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中使用信号是一种好方法吗?还是应该扩展模型的默认保存和编辑功能?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34996531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档