Skip to main content
 首页 » 编程设计

python之Django:类 'Project' 没有定义 '_add_' ,所以 '+' 运算符不能用在它的实例上

2024年08月15日30sky-heaven

在下面的代码中,出于某种原因,在使用项目名称的外键之后,在 def __str__(self): 部分,在 2nd 就像它说的那样 return self.Project + ' (' + self.Situation_Type + ') ' + ' [' + self.Status + '] ' self.Project 部分,它向我显示一条错误消息,

类“Project”没有定义“_add_”,因此不能在其实例上使用“+”运算符

此检查检测应解析但未解析的名称。由于动态调度和管道类型,这在有限但有用的情况下是可能的。顶级项目和类级别项目比实例项目得到更好的支持。

自从出现此错误后,“我的项目”页面一直没有在列表中显示任何内容,但显示有 1 个项目。可能是什么问题?

from django.db import models 
 
# Create your models here. 
from django.contrib.auth.models import User 
from django.db import models 
from django.core.mail import EmailMessage 
 
# Create your models here. 
 
class Project(models.Model): 
   STATUS_CHOICE = ( 
       ('Project Manager', 'Project Manager'), 
       ('Technician', 'Technician'), 
       ('Tester', 'Tester') 
   ) 
   STATUS_CHOICE_1 = ( 
       ('Work Assigned', 'Work Assigned'), 
       ('Work in Progress', 'Work in Progress'), 
       ('Testing', 'Testing'), 
       ('Completed', 'Completed') 
   ) 
   Project_Name = models.CharField(max_length=100) 
   Project_Description = models.CharField(max_length=100) 
   Admin_Name = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Admin_Name_users+') 
   Admin_Mail_ID = models.EmailField(max_length=50) 
   Project_Manager_1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Project_Manager_1_users+') 
   Project_Manager_1_Mail_ID = models.EmailField(max_length=50) 
   Project_Manager_2 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Project_Manager_2_users+', blank=True, null=True) 
   Project_Manager_2_Mail_ID = models.EmailField(max_length=50, blank=True, null=True) 
   Technician_1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Technician_1_users+') 
   Technician_1_Mail_ID = models.EmailField(max_length=50) 
   Technician_2 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Technician_2_users+', blank=True, null=True) 
   Technician_2_Mail_ID = models.EmailField(max_length=50, blank=True, null=True) 
   Technician_3 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Technician_3_users+', blank=True, null=True) 
   Technician_3_Mail_ID = models.EmailField(max_length=50, blank=True, null=True) 
   Tester_1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Tester_1_users+') 
   Tester_1_Mail_ID = models.EmailField(max_length=50, default='Example@gmail.com') 
   Additional_User_1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Ad_1_users+', blank=True, null=True) 
   Additional_User_1_Type = models.CharField(max_length=18, choices=STATUS_CHOICE, blank=True, null=True) 
   Additional_User_1_Mail_ID = models.EmailField(max_length=50, blank=True, null=True) 
   Additional_User_2 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Ad_1_users+', blank=True, null=True) 
   Additional_User_2_Type = models.CharField(max_length=18, choices=STATUS_CHOICE, blank=True, null=True) 
   Additional_User_2_Mail_ID = models.EmailField(max_length=50, blank=True, null=True) 
   Additional_User_3 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='User.Ad_1_users+', blank=True, null=True) 
   Additional_User_3_Type = models.CharField(max_length=18, choices=STATUS_CHOICE, blank=True, null=True) 
   Additional_User_3_Mail_ID = models.EmailField(max_length=50, blank=True, null=True) 
   Status_of_the_project = models.CharField(max_length=18, choices=STATUS_CHOICE_1) 
   Created = models.DateTimeField(auto_now_add=True, null=True, blank=True) 
   Finish_Date = models.DateTimeField(null=True, blank=True) 
   Supporting_Documents = models.FileField(null=True, blank=True) 
 
 
   def __str__(self): 
       return self.Project_Name 
 
   class Meta: 
       verbose_name_plural = "List Of Projects" 
 
class Bug(models.Model): 
 
   STATUS_CHOICE = ( 
       ('Unassigned', 'Unassigned'), 
       ('Assigned', 'Assigned'), 
       ('Testing', 'Testing'), 
       ('Tested', 'tested'), 
       ('Fixed', 'Fixed') 
   ) 
   STATUS_CHOICE_1 = ( 
       ('Bug', 'Bug'), 
       ('Issue', 'Issue'), 
       ('Enhancement', 'Enhancement'), 
       ('Not an issue or bug', 'Not an issue or bug'), 
       ('Fixed', 'Fixed') 
   ) 
   Project = models.ForeignKey(Project, on_delete=models.CASCADE) 
   Issue_Title = models.CharField(max_length=50, blank=True, null=True) 
   Situation_Type = models.CharField(max_length=25, choices=STATUS_CHOICE_1) 
   Basic_Description = models.CharField(max_length=100) 
   Detailed_Description = models.TextField(default='The Description, here.') 
   Status = models.CharField(max_length=18, choices=STATUS_CHOICE) 
   Assigned_to = models.ForeignKey(User, on_delete=models.CASCADE) 
   Assigned_to_Mail_ID = models.EmailField(max_length=50, blank=True, null=True) 
   Admin_Mail_ID = models.EmailField(max_length=50, blank=True, null=True) 
   Reported_by = models.CharField(max_length=50, blank=True, null=True) 
   Reporters_Mail_ID = models.EmailField(max_length=50, blank=True, null=True) 
   Reported_Date = models.DateTimeField(null=True, blank=True) 
   Created = models.DateTimeField(auto_now_add=True, null=True, blank=True) 
   Updated = models.DateTimeField(auto_now=True, null=True, blank=True) 
   Deadline_Date = models.DateTimeField(null=True, blank=True) 
   Supporting_Documents_By_Reporter = models.FileField(null=True, blank=True) 
   Project_Managers_Comment = models.TextField(default='The Description, here.') 
   Supporting_Documents_by_Project_Manager = models.FileField(null=True, blank=True) 
   Technicians_Comment = models.TextField(default='The Description, here.') 
   Supporting_Documents_by_Technician = models.FileField(null=True, blank=True) 
   Testers_Comment = models.TextField(default='The Description, here.') 
   Supporting_Documents_by_Tester = models.FileField(null=True, blank=True) 
 
   def __str__(self): 
       return self.Project + ' (' + self.Situation_Type + ') ' + ' [' + self.Status + '] ' 

def send_mail(admin,ass): email=EmailMessage('Changes made to Task','Changes made to Task','Changes have been made to your an Task reports and we are this request you at earliest to a look away.', to=[admin,ass]) 电子邮件.发送()

def send_mail(admin,ass): 
    email=EmailMessage('Changes made to Task','Changes have been made to one of your Task reports and we hereby request you to have a look at it at the earliest.', to=[admin,ass]) 
    email.send() 

这是我的 admin.py

中的代码
from django.contrib import admin 
from .models import Bug, Project 
from django.contrib.admin.models import LogEntry 
admin.site.register(LogEntry) 
 
 
# Register your models here. 
 
 
class BugDisplay(admin.ModelAdmin): 
       list_display = ('Project', 'Status', 'Basic_Description', 'Assigned_to', 'Created', 'Updated') 
       list_filter = ('Status', 'Assigned_to', 'Project') 
       search_fields = ('Reporters_Mail_ID', 'Reported_by', 'Basic_Description',) 
 
 
 
admin.site.register(Bug, BugDisplay) 
 
 
# Register your models here. 
 
@admin.register(Project) 
class ProjectDisplay(admin.ModelAdmin): 
       list_display = ('Project_Name','Admin_Name', 'Project_Manager_1', 'Status_of_the_project') 
       list_filter = ('Admin_Name', 'Project_Manager_1', 'Status_of_the_project') 
       search_fields = ('Project_Name', 'Project_Description', 'Admin_Name', 'Admin_Mail_ID', 'Project_Manager_1 ' 
                        'Project_Manager_1_Mail_ID', 'Project_Manager_2 ', 'Project_Manager_2_Mail_ID', 
                        'Technician_1', 
                        'Technician_1_Mail_ID', 'Technician_2', 'Technician_2_Mail_ID', 'Technician_3', 
                        'Technician_3_Mail_ID', 'Tester_1', 'Tester_1_Mail_ID', 'Additional_User_1', 'Additional_User_1_Type', 
                        'Additional_User_1_Mail_ID', 'Additional_User_2', 'Additional_User_2_Type', 'Additional_User_2_Mail_ID', 
                        'Additional_User_3', 'Additional_User_3_Type', 'Additional_User_3_Mail_ID', 'Status_of_the_project', 'Created', 
                        'Finish_Date', 'Supporting_Documents' 

)

请您参考如下方法:

那么self.Project(其实约定俗成是这样的属性命名为project,而不是Project)是一个Project对象。

现在你写:

    self.Project + '('

(还有一些额外的添加,但这些不在这里相关,至少不是直接相关)。

所以这意味着您要同时添加一个Project 实例和一个string 实例。但是由于您没有告诉 Python 如何执行此操作(通过覆盖 __add__ 函数),因此无法执行此操作,但我认为您无论如何也不想这样做。

您可能想要做的是首先将 self.Project 转换为它的 str 表示形式。我们可以使用字符串格式来做到这一点:

def __str__(self): 
   return <b>'{} ({})  [{}]'.format(</b>self.Project, self.Situation_Type, self.Status<b>)</b>

这里的参数将自动转换为对应的文本。此外,这也是一种生成字符串的简洁方法。在原始代码中,可能很难发现)和[之间有两个空格,这里我们立即看到(也许你想改变它) .