我正在尝试过滤我的Task
表单,以便在您选择任何子任务时,他们必须共享“超级任务”项目。
以下是我的任务和依赖模型的简单介绍:
class Task(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(blank=True)
project = models.ForeignKey('Project', related_name="tasks")
dependency = models.ManyToManyField('self', through='Dependency', null=True,
blank=True, through_fields=('task', 'sub_task'), symmetrical=False)
class Dependency(models.Model):
task = models.ForeignKey(Task, related_name="dependency_task")
sub_task = models.ForeignKey(Task, related_name="dependency_sub_task")
这就是我在'我的形式上'试图逃脱':
class TaskForm(forms.ModelForm):
subtasks=forms.ModelMultipleChoiceField(queryset=
Task.objects.filter(project=task.project))
class Meta:
model = Task
exclude = ('project',)
我的意思是它看起来像是正确的'排序',但PyLint说它不承认'任务'。
如果我试图通过保存来完成任务,PyLint也会警告我它不起作用:
task = forms.ModelForm.save(commit=False)
PyLint期望在save方法中有一个'self'参数,但是不存在。
我如何做到这一点?
答案 0 :(得分:2)
task
定义时, TaskForm
变量不可用。您应该在构造函数中设置子任务的查询集:
class TaskForm(forms.ModelForm):
subtasks=forms.ModelMultipleChoiceField(queryset=Task.objects.none())
class Meta:
model = Task
exclude = ('project',)
def __init__(self, *args, **kwargs):
super(TaskForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk:
self.fields['subtasks'].queryset = Task.objects.filter(
project=self.instance.project)
要将当前任务传递给表单,请使用instance
参数:
form = TaskForm(instance=Task.objects.get(pk=1))