Как создать форму UpdateView, включающую как основную модель, так и ее ForeignKey в одной html? - PullRequest
0 голосов
/ 15 января 2020

У меня есть модель, которую я хотел бы включить в обновление с использованием формы UpdateView, используя основную модель и связанный с ней ForeignKey, поэтому желаемое восстановление будет включать как основной объект модели, так и все связанные с ним объекты ForeignKey

Моя модель и представление показано ниже следующим образом

Пожалуйста, совет

Спасибо

Модель

class MainTask(models.Model):
    task_title = models.CharField(max_length=200)
    global_task_info = models.TextField(max_length=500,default=None) 
    complete = models.BooleanField(default=False)
    overall_precent_complete = models.PositiveIntegerField(default=0)
    created_at = models.DateTimeField(default=datetime.datetime.now())
    updated_at = models.DateTimeField(default=datetime.datetime.now())
    due_date = models.DateTimeField(default=datetime.datetime.now())
    task_location = models.CharField(max_length=400, blank=True, null=True)

    global_task_assign = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name="global_task_assign",default=1)
    TASK_STATUS_CHOICES = [
    ('ST', 'STARTED'),
    ('NS', 'NOT STARTED'),
    ('IP', 'IN PROGRESS'),
    ('PA', 'PAUSED'),
    ('CO', 'COMPLETED'),
    ]
    task_status = models.CharField(max_length=2,choices=TASK_STATUS_CHOICES,default='NOT STARTED')

    def __str__(self):
        return self.task_title



class ChildTask(models.Model):
    # Relationship Fields
    item_main = models.ForeignKey('MainTask',on_delete=models.CASCADE, related_name="item_main", )
    task_description = models.CharField(max_length=200)
    task_info = models.TextField(blank = True)
    task_complete = models.BooleanField(default=False)
    sub_task = models.CharField(max_length=200)
    task_precent_complete = models.PositiveIntegerField(default=0)
    task_created = models.DateTimeField(default=datetime.datetime.now())
    task_updated_at = models.DateTimeField(default=datetime.datetime.now())
    task_due_date = models.DateTimeField(default=datetime.datetime.now())


    task_assign = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name="task_assign",default=1)


    def __str__(self):
        return self.task_description

Вид

class TaskIdUpdateView(UpdateView):
model = MainTask
template_name = "taskid_update.html"
form_class = TaskUpdateForm
fields = '__all__'

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Ознакомьтесь с документацией django для django встроенного набора форм .

0 голосов
/ 15 января 2020

Вы можете добавить действительный метод формы в свой вид обновления следующим образом и назначить пользователя из профиля пользователя

def form_valid(self, form):
    global_task_assign = UserProfile.objects.get(user=self.request.user)
    form.instance.global_task_assign = global_task_assign
    valid_data = super(TaskIdUpdateView, self).form_valid(form)
    return valid_data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...