Models.py Issue (Ключи) - PullRequest
       4

Models.py Issue (Ключи)

0 голосов
/ 31 декабря 2018

Я пытаюсь создать базовое веб-приложение для небольшого проекта и сталкиваюсь с проблемой, когда всякий раз, когда я использую какой-либо тип связи между двумя атрибутами.Например, когда я пытаюсь извлечь некоторые данные из другой таблицы, они отображаются как «Person object (1)» или «project object (1)».Как я могу гарантировать, что этого не произойдет, и имя человека и название проекта появятся?Я также готов принять любую помощь в улучшении кодов моей базы данных. Заранее благодарю.

Ниже приведен исходный код.

Когда я пытаюсь извлечь некоторые данные из другой таблицы, они отображаются как «Объект персоны (1)» или «Объект проекта (1)».Как я могу убедиться, что этого не произойдет, и имя человека и имя проекта появятся?

из django.db import models

from django.db import models

from django.contrib.auth.models import User, Group
from django.db import models
from django.core.mail import EmailMessage
from django.contrib import admin


class Project(models.Model):
    STATUS_CHOICE = (
       ('Work Assigned', 'Work Assigned'),
       ('Work in Progress', 'Work in Progress'),
       ('Testing', 'Testing'),
    )
    project_name = models.CharField(max_length=100)
    project_description = models.CharField(max_length=100)
    status_of_the_project = models.CharField(max_length=18, choices=STATUS_CHOICE)
    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)
    Admin_Name = models.CharField(max_length=100)


def __str__(self):
    return self.project_name


class Meta:
        verbose_name = "List of Projects"
        verbose_name_plural = "List of Projects"


class Person(models.Model):
    PERSON_TYPE = (
        ('Admin', 'Admin'),
        ('Project Manager', 'Project Manager'),
        ('Technician', 'Technician'),
        ('Tester', 'Tester')
    )

    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='user_person')
    projects = models.ManyToManyField(Project, null=True, related_name='people')
    mail_id = models.EmailField(max_length=50, blank=True, null=True)
    person_type = models.CharField(max_length=18, choices=PERSON_TYPE)

    class Meta:
        verbose_name = "User-Project Assignment"
        verbose_name_plural = "User-Project Assignment"


class Bug(models.Model):
    STATUS_CHOICE = (
        ('Unassigned', 'Unassigned'),
        ('Assigned', 'Assigned'),
        ('Testing', 'Testing'),
        ('Tested', 'tested'),
        ('Fixed', 'Fixed')
    )
    SITUATION_TYPE = (
        ('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=SITUATION_TYPE)
    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(Person, on_delete=models.CASCADE, default=False)
    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)
    admin = models.ForeignKey(Person, on_delete=models.CASCADE, related_name='user_admin', default=False)

    def __str__(self):
            return '{} ({})  [{} {}]'.format(self.project, self.situation_type, self.status, self.issue_title)

    class Meta:
        verbose_name = "Project-Tasks"
        verbose_name_plural = "Project-Tasks"

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Кажется, что метод __str__ вашего Project класса имеет неправильный отступ.Это заставляет вас видеть Project object(1).

В случае Person object(1) вы не реализовали метод __str__ для этого класса.

В любом определении класса модели django, которое выкак правило, вы хотите реализовать и переопределить метод django.db.models.model __str__, как вы это делали в своем классе Bug.

Этот метод __str__ определяет способ визуализации модели при печати в поток, такой как stdout, или в этом случае я предполагаю, что он визуализируется с помощью движка шаблонов Djangos.

Типичный вариант использованияможет выглядеть следующим образом (как в оболочке python3.6):

>>> class MyClass:
>>>     def __init__(self, x):
>>>         self.x = x
>>> 
>>>     def __str__(self):
>>>         # a string formatted with this instances x value
>>>         return "{}".format(self.x)
>>> 
>>> my_instance = MyClass(1)
>>> print(my_instance)
>>> 1

Обратите внимание на старый метод __unicode__.Этот метод работает так же, как __str__, но используется в Python 2.x.

0 голосов
/ 31 декабря 2018

может означать, что вам также необходимо добавить

def __unicode__(self):
    return u"%s" % (self. project_name)

в ваш класс Project (аналогично функции "__str__").И то же самое для Персоны.

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