微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django admin queryset 用户 django-allauth 的外键

如何解决Django admin queryset 用户 django-allauth 的外键

我有一个 e-commerce 开发项目,我希望从 email 站点向客户发送一个 admin,我无法正确执行 queryset这。我有以下模型:

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,blank=True)
    datos_pedido = models.ForeignKey(
        'DatosPedido',on_delete=models.SET_NULL,blank=True,null=True)
    pago = models.ForeignKey(
        'Pago',null=True)
    cupon = models.ForeignKey(
        'Cupon',null=True)

    class Meta:
        verbose_name_plural = "Orden"

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

cliente一个 User 模型的外键,我想获取 email 地址,我尝试了很多方法,但我就是无法获取

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)

解决方法

您可以尝试迭代查询集以访问行中的特定数据。

试试下面的代码。

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)

希望这段代码对你有帮助

,

除非您扩展了默认用户模型或创建了自己的用户模型,否则 Django 默认用户模型没有电子邮件字段。

因此,如果您扩展或创建了自己的模型,则可以这样做

myordenobj.cliente.email

但如果您使用的是默认用户模型并且您的用户名是电子邮件,那么就这样做。

myordenobj.cliente.username

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。