首页 > 解决方案 > 如何在同一 html 中创建包含主模型及其 ForeignKey 的 UpdateView 表单?

问题描述

我有一个模型,我想使用 Main 模型及其相关 ForeignKey 使用 UpdateView 表单包含 Update ,因此所需的结果将包括主模型对象及其所有相关 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__'

标签: djangodjango-formsdjango-views

解决方案


您可以按如下方式向更新视图添加表单有效方法,并从用户配置文件中分配用户

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

推荐阅读