0
0 комментариев

Вопрос — Как присвоить в view значение полю at_project? При редактировании поле должно заполнится автоматически. Зашли в проект — создали задачу, задача должна привязаться к этому проекту.

Имеются модели

class Task(models.Model):
    name = models.CharField('Название',
                            max_length=50,
                            default='')
    period = models.DateTimeField('Срок',
                                  blank=True,
                                  null=True)
    responsible = models.ForeignKey(CustomUser,
                                    verbose_name='Ответственный',
                                    blank=True,
                                    related_name='task_responsible')
    at_project = models.ForeignKey(Project,
                                   verbose_name='Относится к',
                                   related_name='at_project')
 
class Project(models.Model):
    name = models.CharField('Название проекта',
                            max_length=100)
    create_date = models.DateField('Дата создания',
                                   blank=True,
                                   null=True)
    start_date = models.DateField('Дата начала проекта',
                                  blank=True,
                                  null=True)
    end_date = models.DateField('Дата окончания',
                                blank=True,
                                null=True)
    description = models.CharField('Описание',
                                   max_length=200,
                                   blank=True)
    income = models.IntegerField('Доход',
                                 blank=True,
                                 null=True)
    costs = models.IntegerField('Трудозатраты',
                                blank=True,
                                null=True)
    total = models.IntegerField('Итого',
                                blank=True,
                                null=True)
    responsible = models.ManyToManyField(CustomUser,
                                         verbose_name='Назначеные сотрудники',
                                         blank=True,
                                         related_name='project_responsible')
    tasks = models.ManyToManyField('Task',
                                   verbose_name='Задачи по проекту',
                                   blank=True,
                                   related_name='project_tasks')
    created_by = models.CharField('Кем создано',
                                  max_length=100,
                                  blank=True)

И имеется вот такой view:

args['task'] = Task.objects.get(pk=task_id)
    args['form'] = EditTaskForm(request.POST, instance=args['task'])
    args['task_id'] = task_id
    args['project_id'] = project_id
    if request.POST:
        form = EditTaskForm(request.POST, instance=args['task'])
        if form.is_valid():
            new_at_project = form.save(commit=False)
            new_at_project.at_project = Project.objects.get(pk=args['project_id'])
            new_at_project.save()
            form.save_m2m()
            return redirect('/project/{0}/task/{1}'.format(args['project_id'], args['task_id']))
        else:
            args['error'] = form.errors
            args['form'] = form

При сохранении формы выдается

at_project
Обязательное поле.

Update:
сделано так, и подозреваю, неправильно:

class EditTaskForm(forms.ModelForm):
    class Meta:
        model = Task
        fields = ('name', 'period', 'responsible')
        exclude = ('at_project', )
 
    def __init__(self):
        super(EditTaskForm, self).__init__()
        self.at_project = Project
 
    def save(self, **kwargs):
        task = super(EditTaskForm, self).save()
        task.at_project = self.project
        task.save()

страница выдает

TypeError
__init__() takes exactly 1 argument (2 given)


Добавить комментарий