Администратор Django: автозаполнение идентификатора электронной почты и имя_связи = проблема - PullRequest
0 голосов
/ 26 августа 2018

Это код, который у меня есть в моем 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'.

Пожалуйста, имейте в виду, что я все еще новичок и не очень разбираюсь в предмете. Возможно, вам придется немного более наглядно объяснить, что вы имеете в виду. Большое вам спасибо!

1 Ответ

0 голосов
/ 26 августа 2018

Ответ на вопрос 3 следующий:

Admin_Name = models.ForeignKey (пользователь, on_delete = models.CASCADE, related_name = 'User.Admin_Name_users +')

Использование имени таблицысначала следует ., а затем в конце добавить +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...