简体   繁体   中英

Django admin queryset foreign key to user django-allauth

I have an e-commerce development and I'm looking to send an email to the client from the admin site, I can´t the queryset correclty to do this. I have the following model:

models.py:

class Orden(models.Model):
    cliente = models.ForeignKey(
        User, on_delete=models.CASCADE, verbose_name='Usuario')
    productos = models.ManyToManyField(OrdenProducto)
    fecha_orden = models.DateTimeField(auto_now_add=True)
    completada = models.BooleanField(default=False, null=True, blank=True)
    id_transaccion = models.CharField(max_length=20, null=True)
    correo_enviado = models.BooleanField(default=False, null=True, blank=True)
    datos_pedido = models.ForeignKey(
        'DatosPedido', on_delete=models.SET_NULL, blank=True, null=True)
    pago = models.ForeignKey(
        'Pago', on_delete=models.SET_NULL, blank=True, null=True)
    cupon = models.ForeignKey(
        'Cupon', on_delete=models.SET_NULL, blank=True, null=True)

    class Meta:
        verbose_name_plural = "Orden"

    def __str__(self):
        return self.cliente.username

cliente has a foreign key to the User model and I want to get the email address, I have tried many ways but I just can´t get it.

admin.py :

class OrdenAdmin(admin.ModelAdmin):
    list_display = ('cliente', 'completada', 'correo_enviado')
    actions = ['enviar_correo']

    def enviar_correo(self, request, queryset):
        queryset.update(correo_enviado=True)
        a = queryset.get(cliente=self.user.email)

        send_mail('test', 'test', 'xxxxxx@mail.com',
                  ['a], fail_silently=True)

You can try iterating the queryset to access the specific data in the rows.

Try the following code.

class OrdenAdmin(admin.ModelAdmin):
    list_display = ('cliente', 'completada', 'correo_enviado')
    actions = ['enviar_correo']

    def enviar_correo(self, request, queryset):
        queryset.update(correo_enviado=True)
        for obj in queryset:
            email = obj.cliente.email

        send_mail('test', 'test', email,
                  ['a], fail_silently=True)

I hope this code helps you

Unless you have extended the default user model or have created Your Own user model, django default user model does not have an email field.

So if you have extended or created Your Own model you can do

myordenobj.cliente.email

But if you're using the default user model and your username is an email then do.

myordenobj.cliente.username

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM