N
N
NikClik2018-08-16 15:19:51
Django
NikClik, 2018-08-16 15:19:51

How to create a form to add records to 2 related models?

There are 2 models connected through ForeignKey, naturally one-parent and another-child.

class GroupTasks(models.Model):
    TASK_STATUS = {
        ('В процессе выполенения', 'В процессе выполенения'),
        ('В ожидании выполнения', 'В ожидании выполнения'),
        ('Выполнение закончено', 'Выполнение закончено'),
    }
    owner = models.CharField(blank=True, verbose_name="Владелец", max_length=1000000, editable=False)
    header = models.CharField(blank=False, verbose_name="Заголовок задачи", max_length=1000000)
    dateOfStart = models.DateTimeField(blank=False, verbose_name="Дата, время начала задачи")
    dateOfEnd = models.DateTimeField(blank=True, verbose_name="Дата, время окончания задачи")
    progress = models.IntegerField(default=0, verbose_name="Прогресс")
    status = models.CharField(choices=TASK_STATUS, verbose_name="Статус", max_length=1000000, default="В ожидании выполнения")

    def __str__(self):
        return "Групповая задача %s" % (self.header, )

    class Meta:
        verbose_name = 'Групповые задачи'
        verbose_name_plural = 'Групповые задачи'


class UnderTask(models.Model):
    TASK_STATUS = {
        ('В процессе выполенеия', 'В процессе выполенеия'),
        ('В ожидании выполнения', 'В ожидании выполнения'),
        ('Выполнение закончено', 'Выполнение закончено'),
    }
    headerTask = models.ForeignKey(GroupTasks, on_delete=models.CASCADE, editable=False)
    creator = models.CharField(max_length=1000000, verbose_name="Создатель", blank=True, editable=False)
    excerpt = models.CharField(max_length=1000000, verbose_name="Выполняющий")
    actions = models.TextField(blank=False, max_length=1000000, verbose_name="Выполняемые работы")
    dateOfStart = models.DateTimeField(blank=False, verbose_name="Дата, время начала задачи")
    dateOfEnd = models.DateTimeField(blank=True, verbose_name="Дата, время окончания задачи")
    step = models.IntegerField(blank=False, default=0, verbose_name="Шаг")
    status = models.CharField(choices=TASK_STATUS, default="В ожидании выполнения", max_length=1000000, verbose_name="Статус выполнения")

    def __str__(self):
        return "Подзадача %s" % (self.excerpt,)

    class Meta:
        verbose_name = 'Подзадачи'
        verbose_name_plural = 'Подзадачи'

I don't know how to create a template to add an entry to both the parent and several entries to the child model, i.e. this is a template that functions as inlines in admin. Does anyone have any ideas or has anyone answered similar questions?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
V
Vampre, 2018-08-17
@NikClik

Create the form you need, and then in the view, manually specify in which model which fields to save, for example:

if request.method == 'POST':
    form = YourTaskForm(request.POST)
    if form.is_valid():
        group_task = GroupTasks(owner=form.cleaned_data['owner']) # только добавьте все поля
        group_task.save()
        under_task=UnderTask(headerTask=group_task, creator=form.cleaned_data['creator']) # добавить все поля
        under_task.save()

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question