Django Модель с неуникальными именами - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь создать простую доску стиля kanban для моего приложения диспетчера задач в Django 3.0.3. Я уже написал код для проектов и задач, но у меня возникают проблемы с поиском наилучшего способа создания моделей для плат kanban. В настоящее время у меня есть две модели, но могу ли я сделать это в одной для простоты?

Мое базовое требование c заключается в том, что у каждого проекта может быть своя собственная плата, и у каждой платы будет несколько панелей. Вот пример:

Плата: Разработка

  1. Отставание
  2. Начато
  3. Разработка
  4. et c .. .

Плата: Операции

  1. Запрошено
  2. Работает
  3. В ожидании
  4. и c ...

Имея только одну модель, я не уверен, будет ли у нее такая гибкость, которая мне необходима для ее полной разработки. Но наличие нескольких моделей может быть слишком громоздким для конечного пользователя. Вот мои текущие модели:

class Board(models.Model):
    """
    Defines Kanban boards
    """
    name = models.CharField(max_length=25)
    slug = models.SlugField(default="")
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    tags = TaggableManager(blank=True)

    def __str__(self):
        board_name = self.project.name + ":" + self.name
        return board_name


class BoardPanel(models.Model):
    """
    Defines panels in project board
    """
    title = models.CharField(max_length=30)
    slug = models.SlugField(default="")
    board = models.ForeignKey(Board, on_delete=models.CASCADE)
    tasks = models.ManyToManyField(Task)

    def __str__(self):
        panel_name = self.board.name + ":" + self.title
        return panel_name

1 Ответ

0 голосов
/ 02 апреля 2020

Теоретически вы можете, но это не очень хороший подход для любого варианта использования. То, что вы сделали здесь, на самом деле является лучшей практикой.

Также. в вашем комментарии вы упоминаете, чтобы облегчить навигацию. Для этого вы можете использовать Django Admin Inlines.

Примерно так.

class BoardPanelInline(admin.TabularInline):
    model = BoardPanel
    extra = 0

@admin.register(Board)
class BoardAdmin(admin.ModelAdmin):
    list_display = ('name', 'id', 'project',)
    inlines = [BoardPanelInline, ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...