J'ai un champ m2m appelé "admins" à l'intérieur d'un modèle et j'ai besoin d'obtenir à partir d'une vue toutes les entrées sélectionnées dans ce champ, qui sont des ID utilisateur. Ensuite, avec les ID utilisateur, obtenez les e-mails pour chaque utilisateur. C'est possible?
La chose exacte que je veux faire est d'envoyer un message de masse à tous les administrateurs d'un espace à l'intérieur de cette plate-forme.
Modèle d'espaces:
class Space(models.Model):
"""
Spaces model. This model stores a "space" or "place" also known as a
participative process in reality. Every place has a minimum set of
settings for customization.
There are three main permission roles in every space: administrator
(admins), moderators (mods) and regular users (users).
"""
name = models.CharField(_('Name'), max_length=250, unique=True,
help_text=_('Max: 250 characters'))
url = models.CharField(_('URL'), max_length=100, unique=True,
validators=[RegexValidator(regex='^[a-z0-9_]+$',
message='Invalid characters in the space URL.')],
help_text=_('Valid characters are lowercase, digits and \
admins = models.ManyToManyField(User, related_name="space_admins", verbose_name=_('Administrators'), help_text=_('Please select the \
users that will be administrators of this space'), blank=True,
null=True)
mods = models.ManyToManyField(User, related_name="space_mods",
verbose_name=_('Moderators'), help_text=_('Please select the users \
that will be moderators of this space.'), blank=True, null=True)
users = models.ManyToManyField(User, related_name="space_users", verbose_name=_('Users'), help_text=_('Please select the users that \
can participate on this space'), blank=True, null=True)
Vue pour l'envoi d'un seul e-mail:
@login_required
def add_intent(request, space_url):
"""
Returns a page where the logged in user can click on a "I want to
participate" button, which after sends an email to the administrator of
the space with a link to approve the user to use the space.
:attributes: space, intent, token
:rtype: Multiple entity objects.
:context: space_url, heading
"""
space = get_object_or_404(Space, url=space_url)
#admins = space.admins??
try:
intent = Intent.objects.get(user=request.user, space=space)
heading = _("Access has been already authorized")
except Intent.DoesNotExist:
token = hashlib.md5("%s%s%s" % (request.user, space,
datetime.datetime.now())).hexdigest()
intent = Intent(user=request.user, space=space, token=token)
intent.save()
subject = _("New participation request")
body = _("User {0} wants to participate in space {1}.\n \
Please click on the link below to approve.\n {2}"\
.format(request.user.username, space.name,
intent.get_approve_url()))
heading = _("Your request is being processed.")
send_mail(subject=subject, message=body,
from_email="[email protected]",
recipient_list=[space.author.email])
# Send a notification to all the admins in that space
#send_mass_mail()
return render_to_response('space_intent.html', \
{'space_name': space.name, 'heading': heading}, \
context_instance=RequestContext(request))
vous pouvez:
space.related.all()
pour renvoyer un QuerySet of User
Pour Django> = 1.9
space.admins.all()
* Tel que mentionné par Salvatore Iovene