2011-06-03 86 views
1

我有一个django注册函数,它将激活电子邮件重新发送给给定的收件人。我试图将接收多个用户的函数转换为每个电子邮件只有一个用户。然而,当我尝试改变它时,它会抛出一个AttributeError将函数从多个转换为单个函数

def resend_activation(self, email, site): # for multiple emails -- this works 
    sent = False 
    users = User.objects.all().filter(email=email) 

    if users: 
     for user in users: 
      registration_profiles = self.all().filter(user=user) 
      for registration_profile in registration_profiles: 
       if not registration_profile.activation_key_expired(): 
        registration_profile.send_activation_email(site) 
        sent = True 
    return sent 

def resend_activation(self, email, site): # for single email -- this does not work 
    sent = False        
    user = User.objects.all().filter(email=email) 

    if user: 
     registration_profile = self.all().get(user=user) 
     if not registration_profile.activation_key_expired(): 
      registration_profile.send_activation_email(site) 
      sent = True 
    return sent 

后者函数抛出AttributeError,但我不明白,为什么这个功能不“工作”没有for循环。这里似乎是我的问题?谢谢。

回答

4

尝试:

def resend_activation(self, email, site): 
    sent = False 
    # Get the user you are looking for 
    try: 
     single_user = User.objects.get(email=email) 
    except User.DoesNotExist: 
     return false 

    # Get all the profiles for that single user 
    registration_profiles = self.all().filter(user=user) 
     # Loop through, and send an email to each of the profiles belonging to that user 
     for registration_profile in registration_profiles: 
      if not registration_profile.activation_key_expired(): 
       registration_profile.send_activation_email(site) 
       sent = True 
    return sent 

在原有的User.object.filter(电子邮件=电子邮件)返回一个查询集这是从查询过滤器所返回从数据库对象的集合(电子邮件=电子邮件)。原始中的for循环遍历每个对象,并发送相应的电子邮件。您正尝试致电send_

相关问题