#database #dataframe #data-structures #model #django-rest-framework
#База данных #фрейм данных #структуры данных #Модель #django-rest-framework
Вопрос:
Я хотел бы создать систему управления, когда я создаю Project
проект, содержащий множество TaskGroup
таких как «To do», «Выполнение» и «Готово», и который является типом по умолчанию TaskGroup
called DefaultTaskGroup
, и администратор может создать какой-то другой TaskGroup
с разными полями CharField, TextField, DateTimeField, Single or Multiple Choice. и т.д., Который будет сохранен как TaskGoup1 with new field 1 and new field 2
, TaskGroup2 with new field 3 and new field 4
если я создал новую задачу, я могу выбрать тип TaskGroup
из списков групп задач (Группа задач по умолчанию, TaskGroup1 и TaskGroup2).
Я создал частичные модели, как показано ниже, они неправильные, но я озадачен структурой базы данных. Благодарим за прочтение, и мы будем высоко признательны за любой совет.
class TaskGroupType(models.Model):
name = models.CharField(max_length=58, null=True)
def __str__(self):
return self.name
class Project(models.Model):
created = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(
UserProjectOwners, null=True, blank=True,
on_delete=models.CASCADE, related_name='Owner'
)
name = models.CharField(max_length=100)
desc = models.CharField(max_length=200, null=True, blank=True)
category = models.CharField(max_length=100, null=True, blank=True)
members = models.ForeignKey(
UserProjectTeam, null=True, blank=True,
on_delete=models.CASCADE, related_name="project"
)
tasktype = models.ManyToManyField(TaskType)
class Meta:
ordering =['created']
verbose_name = "User Table"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class TaskGroup(models.Model):
created = models.DateTimeField(auto_now_add=True)
name = models.CharField(max_length=280, blank=True)
order = models.IntegerField(null=True, blank=True)
project = models.ForeignKey(
Project,
related_name='taskgroups', null=True, blank=True,
on_delete=models.CASCADE
)
class Meta:
ordering =['created']
verbose_name = "Task Group"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Task(models.Model):
SORT_TYPE = (
(1, "Normal"),
(2, "Urgent"),
(3, "Very Urgent"),
)
createDate = models.DateTimeField(auto_now_add=True)
tasklist = models.ForeignKey(
TaskList,
related_name='tasks', null=True, blank=True,
on_delete=models.CASCADE
)
completed = models.BooleanField(default=False)
accomplished = models.DateTimeField(null=True, blank=True)
desc = models.CharField(max_length=380, blank=True)
name = models.CharField(max_length=180, blank=True)
performer = models.ForeignKey(
User,
related_name='Task', null=True, blank=True,
on_delete=models.CASCADE
)
participant = models.ManyToManyField(
User,
related_name=' '
)
startDate = models.DateTimeField(null=True, blank=True)
dueDate = models.DateTimeField(null=True, blank=True)
priority = models.CharField(max_length=100, choices=SORT_TYPE, null=True, blank=True)
order = models.IntegerField(null=True, blank=True)
remark = models.CharField(max_length=400, null=True, blank=True)
class Meta:
ordering =['createDate']
verbose_name = "Task Table"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
Ответ №1:
Согласно моему пониманию вашего проекта
- Пользователь может создать проект
- Проект может иметь несколько задач
- Каждая задача принадлежит целевой группе
- В каждом проекте может быть несколько участников.
Если приведенный выше вариант использования подходит. Вот мои экземпляры модели.
class TaskGroup(models.Model):
name = models.CharField()
...
class Task(models.Model):
task_group = models.ForeignKey(TaskGroup)
name = models.CharField()
...
class Project(models.Model):
owner = models.ForeignKey(User)
name = models.CharField()
...
class ProjectTask(models.Model):
project = models.ForeignKey(Project)
task = models.ForeignKey(Task)
...
# You can use Many field in Project model for Task reference if this model is not needed
class ProjectMember(models.Model):
project = models.ForeignKey(Project)
member = models.ForeignKey(User)
...
# You can use Many field in Project model instead if this model is not required
Наличие отдельной модели для ассоциации добавляет гибкости для управления каждой ассоциацией отдельно, и могут быть добавлены дополнительные параметры.
Пример содержит только ассоциацию.
Комментарии:
1. Привет, большое спасибо за ответы, но мне также нужно
TaskGroupType
сохранять разныеTaskGroup
шаблоны, ссылайтесь на фотографии как на ссылку d.pr/free/i/j3VO3z на первом рисунке указано значение по умолчаниюTaskGoup
, и я могу щелкнуть,Type
чтобы выбрать другойTaskGroup
шаблон, на третьем рисунке на три новых поля больше, чем на первом рисунке.2. Вы можете соответствующим образом расширить ассоциацию. создайте
TaskGroupType
модель с внешним ключом кTaskGroup
. Затем вы можете получить TaskGroupType для каждой целевой группы.3.Привет, я действительно хотел принять ваш ответ, но мне действительно жаль, что это все еще не решает мой вопрос, когда пользователь добавляет шаблон с 3-6 полями по умолчанию, он также может добавить несколько пользовательских полей, вы знаете, как создать этот шаблон по умолчанию с пользовательскими полями? d.pr/free/i/40eZQM d.pr/free/i/0RdJy4
4. являются ли это полями формы? Вы хотите динамически добавлять поля формы?
5. Я не знаю, являются ли они полями формы, эти поля могут где-то добавляться и изменяться, поэтому я думаю, что это поля формы, да, я хочу динамически добавлять поля формы, но я не знаю, как добавлять и сохранять поля и шаблоны.