Django admin queryset外键到用户django-allauth
Django admin queryset foreign key to user django-allauth
我有一个 e-commerce
开发,我想从 admin
站点向客户发送一个 email
,我不能 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, 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
有一个指向 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)
除非您扩展了默认用户模型或创建了您自己的用户模型,否则 django 默认用户模型没有电子邮件字段。
因此,如果您已经扩展或创建了自己的模型,您可以这样做
myordenobj.cliente.email
但是,如果您使用的是默认用户模型并且您的用户名是电子邮件,那么请这样做。
myordenobj.cliente.username
您可以尝试迭代查询集以访问行中的特定数据。
试试下面的代码。
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)
希望这段代码对您有所帮助
我有一个 e-commerce
开发,我想从 admin
站点向客户发送一个 email
,我不能 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, 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
有一个指向 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)
除非您扩展了默认用户模型或创建了您自己的用户模型,否则 django 默认用户模型没有电子邮件字段。
因此,如果您已经扩展或创建了自己的模型,您可以这样做
myordenobj.cliente.email
但是,如果您使用的是默认用户模型并且您的用户名是电子邮件,那么请这样做。
myordenobj.cliente.username
您可以尝试迭代查询集以访问行中的特定数据。
试试下面的代码。
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)
希望这段代码对您有所帮助