Конвертировать функцию из множества в одну - PullRequest
1 голос
/ 03 июня 2011

У меня есть функция от django-registration, которая повторно отправляет электронное письмо с активацией указанным получателям.Я пытаюсь преобразовать функцию приема нескольких пользователей для данного письма только одному пользователю на одно письмо.Тем не менее, он выдает 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.В чем здесь моя проблема?Спасибо.

1 Ответ

4 голосов
/ 03 июня 2011

попробовать:

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 (email = email) возвращает queryset , который представляет собой набор объектов из базы данных, которые были возвращены фильтром запроса (email = email ) . Цикл for в оригинале перебирает каждый из этих объектов и отправляет соответствующее письмо. Вы пытались позвонить send_

...