如何解决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 举报,一经查实,本站将立刻删除。