如何创建在同一html中包含主模型及其外键的更新视图表单?



我有一个模型,我想包括使用主模型及其相关外键的UpdateView表单进行更新,因此所需的resault将包括主模型对象及其所有相关的外键对象

我的模型和视图如下所示

请指教

谢谢

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__'

看看 django inline formset 的 django 文档。

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

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

最新更新