Это код, который у меня есть в моем models.py. Я пытаюсь разработать небольшой сайт, используя только администратора Django.
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.CharField(max_length=100)
Admin_Mail_ID = models.EmailField(max_length=50)
Project_Manager_1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='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='Project_Manager_2_users')
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='Technician_1_users')
Technician_1_Mail_ID = models.EmailField(max_length=50)
Technician_2 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='Technician_2_users')
Technician_2_Mail_ID = models.EmailField(max_length=50, blank=True, null=True)
Technician_3 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='Technician_3_users')
Technician_3_Mail_ID = models.EmailField(max_length=50, blank=True, null=True)
Tester_1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='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='Ad_1_users')
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='Ad_1_users')
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='Ad_1_users')
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 save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if self.id:
user=self.Assigned_to
self.Assigned_to_Mail_ID=user.email
send_mail(self.Admin_Mail_ID, ass=self.Assigned_to_Mail_ID)
super(Bug, self).save()
class Meta:
verbose_name_plural = "Projects Tasks/Issues"
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()
Это проект, над которым я работаю уже довольно давно. У меня нет большого опыта в Django / Python ..
1) Связанный ключ базы данных isssue
Как извлечь идентификатор электронной почты пользователей и сделать его автозаполненным, когда пользователь сайта администратора выбирает Имя пользователя, используя раскрывающийся список?
2) Идеи разработки альтернативной базы данных
Каков наилучший способ оптимизации списка пользователей? Есть ли другой способ, как вы, ребята, могли бы предложить мне (нубу) сделать сайт таким образом, чтобы можно было добавлять дополнительных пользователей, не ограничивая сайт размещением только 3 дополнительных пользователей?
3) related_name
Выпуск
Почему я получаю следующую ошибку при использовании related_name=
? Как мне это исправить?
ERRORS:
Issues.Project.Additional_User_1: (fields.E304) Reverse accessor for 'Project.Additional_User_1' clashes with reverse accessor for 'Project.Additional_User_2'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_1' or 'Project.Additional_User_2'.
Issues.Project.Additional_User_1: (fields.E304) Reverse accessor for 'Project.Additional_User_1' clashes with reverse accessor for 'Project.Additional_User_3'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_1' or 'Project.Additional_User_3'.
Issues.Project.Additional_User_1: (fields.E305) Reverse query name for 'Project.Additional_User_1' clashes with reverse query name for 'Project.Additional_User_2'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_1' or 'Project.Additional_User_2'.
Issues.Project.Additional_User_1: (fields.E305) Reverse query name for 'Project.Additional_User_1' clashes with reverse query name for 'Project.Additional_User_3'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_1' or 'Project.Additional_User_3'.
Issues.Project.Additional_User_2: (fields.E304) Reverse accessor for 'Project.Additional_User_2' clashes with reverse accessor for 'Project.Additional_User_1'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_2' or 'Project.Additional_User_1'.
Issues.Project.Additional_User_2: (fields.E304) Reverse accessor for 'Project.Additional_User_2' clashes with reverse accessor for 'Project.Additional_User_3'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_2' or 'Project.Additional_User_3'.
Issues.Project.Additional_User_2: (fields.E305) Reverse query name for 'Project.Additional_User_2' clashes with reverse query name for 'Project.Additional_User_1'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_2' or 'Project.Additional_User_1'.
Issues.Project.Additional_User_2: (fields.E305) Reverse query name for 'Project.Additional_User_2' clashes with reverse query name for 'Project.Additional_User_3'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_2' or 'Project.Additional_User_3'.
Issues.Project.Additional_User_3: (fields.E304) Reverse accessor for 'Project.Additional_User_3' clashes with reverse accessor for 'Project.Additional_User_1'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_3' or 'Project.Additional_User_1'.
Issues.Project.Additional_User_3: (fields.E304) Reverse accessor for 'Project.Additional_User_3' clashes with reverse accessor for 'Project.Additional_User_2'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_3' or 'Project.Additional_User_2'.
Issues.Project.Additional_User_3: (fields.E305) Reverse query name for 'Project.Additional_User_3' clashes with reverse query name for 'Project.Additional_User_1'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_3' or 'Project.Additional_User_1'.
Issues.Project.Additional_User_3: (fields.E305) Reverse query name for 'Project.Additional_User_3' clashes with reverse query name for 'Project.Additional_User_2'.
HINT: Add or change a related_name argument to the definition for 'Project.Additional_User_3' or 'Project.Additional_User_2'.
Пожалуйста, имейте в виду, что я все еще новичок и не очень разбираюсь в предмете. Возможно, вам придется немного более наглядно объяснить, что вы имеете в виду.
Большое вам спасибо!