2016-01-25 43 views
0

我有簡單的模型在Django: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,即使在刪除這個已被設置爲默認的人之後?

+0

你能否增加額外的信息,因爲它不清楚你的目標是什麼? –

+0

我希望將一封電子郵件始終設置爲默認電子郵件地址,即使當我刪除當前標記爲deafult的電子郵件地址我想讓其他電子郵件地址成爲默認電子郵件地址 – Blejwi

+0

當您刪除當前默認電子郵件地址時,如何確定哪個電子郵件地址成爲默認電子郵件地址? – Anentropic

回答

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中使用信號是好的方法嗎?或者我應該擴展模型的默認保存和編輯功能?