Skip to main content
 首页 » 编程设计

python之如何通过数据库字段的数据更改 Django 模型的对象名称

2024年08月21日34EasonJim

我想知道如何通过与我的数据库相对应的数据更改 Campaign 对象和 Destino 对象。我正在使用将数据返回到我的数据库的代码,但在它显示它不执行的操作的部分。还有其他方法吗?感谢您阅读我的问题并留下您的答案。

这是我的 admin.py 文件:

from django.contrib import admin 
from .models import Campania, Destino 
 
class CampaniaAdmin(admin.ModelAdmin): 
   list_display = ('id_campania','nombre_campania','fecha_creacion','fecha_inicio','usuario','correos_diarios','email','sms', 'completado') 
   search_fields = ['nombre_campania'] 
 
class DestinoAdmin(admin.ModelAdmin): 
   list_display = ('id_destino','unidad_id_unidad','campania_id_campania','enviado','fecha_hora') 
   search_fields = ['id_destino'] 

这是我的 models.py 文件:

from __future__ import unicode_literals 
from django.db import models 
 
class Campania(models.Model): 
   id_campania = models.AutoField(primary_key=True, verbose_name='ID') 
   template = models.ForeignKey('Template', db_column='template', blank=True, null=True, verbose_name='Template') 
   nombre_campania = models.CharField(max_length=500, blank=True, null=True, verbose_name='Nombre de la campaña') 
   fecha_creacion = models.DateField(blank=True, null=True, verbose_name='Fecha de creación') 
   fecha_inicio = models.DateField(blank=True, null=True, verbose_name='Fecha de inicio') 
   usuario = models.CharField(max_length=250, blank=True, null=True, verbose_name='Creador de la campaña') 
   correos_diarios = models.IntegerField(blank=True, null=True, verbose_name='Correos por día') 
   email = models.BooleanField(default=True, verbose_name='Enviar correo') 
   sms = models.BooleanField(default=True, verbose_name='Enviar mensaje (sms)') 
   completado = models.NullBooleanField(default=False, blank=True, null=True, verbose_name='Completado') 
 
   class Meta: 
      managed = False 
      db_table = 'campania' 
      verbose_name_plural = "Campañas" 
 
   def __str__(self): 
       return '{}'.format(self.nombre_campania) 
 
 
class Destino(models.Model): 
   id_destino = models.AutoField(primary_key=True, verbose_name='ID') 
   unidad_id_unidad = models.ForeignKey('Unidad', db_column='unidad_id_unidad', blank=True, null=True, verbose_name='Unidad destino') 
   campania_id_campania = models.ForeignKey('Campania', db_column='campania_id_campania', blank=True, null=True, verbose_name='Campaña dirigida') 
   enviado = models.NullBooleanField(blank=True, null=True, verbose_name='Confirmación de envío de campaña') 
   fecha_hora = models.DateTimeField(blank=True, null=True, verbose_name='Fecha de envío') 
 
   class Meta: 
      managed = False 
      db_table = 'destino' 
      verbose_name_plural = "Destinos" 
 
 
   def __str__(self): 
       return '{}'.format(self.unidad_id_unidad) 

这是我的管理站点的图片:

勾选Actions(Acciones)部分

我使用的是 1.8 版的 Django 和 3.4.4 版的 Python

请您参考如下方法:

Django 管理员正在使用 LogEntry 显示您最近的操作。此模型基于内容类型 - 尝试运行 manage.py migrate更改模型后(更改内容类型中的模型名称)。

另一件事是对象名称 - 它存储在 LogEntry 中在 object_repr字段并且它在操作之后立即被转储,因此在执行操作后更改模型的 repr 计算方式将不会反射(reflect)在这里(看起来当执行操作时,您没有为您的模型定义 __str__它使用 Django 的默认 __str__ ,即 <Model name> object )。如果您现在对特定对象执行某些操作(创建、更新、删除),您应该会在此处看到对象的 __str__ 的值。