在Django保存表单以防出现多个

2024-04-19 15:38:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经通读了所有与这个话题有关的讨论,但仍然不能找出问题所在。你知道吗

 tempTaskForm = newTaskForm.save(commit=False)
 tempTaskForm.children_are_visible = True
 responsiblePeopleFormTemp = responsiblePeopleForm.save(commit=False)
 tempTaskForm.parent_id = parentId
 tempTaskForm.children_number = 0
 responsiblePeopleFormTemp.task =  newTaskForm.save()
 responsiblePeopleForm.save() # Error raised

型号:

class Tasks(models.Model):
    id = models.IntegerField(primary_key=True)
    description_short = models.CharField(max_length=500)
    description_full = models.TextField()
    status = models.ForeignKey(TaskStatus, default = 1, on_delete=models.CASCADE)
    type = models.ForeignKey(TaskType, on_delete=models.CASCADE)
    date_start = models.DateTimeField(blank=True, null=True)
    date_end = models.DateTimeField(blank=True, null=True)
    is_important = models.IntegerField(blank=True)
    parent_id = models.IntegerField(blank=True, null=True)
    rgt = models.IntegerField()
    lft = models.IntegerField()
    parents_number = models.IntegerField()
    children_number = models.IntegerField()
    children_are_visible = models.IntegerField()  # This field type is a guess.
    visible = models.IntegerField() 

    effective_from = models.DateTimeField(blank=True, null=True)
    effective_to = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'tasks'

    def __unicode__(self):
        return smart_unicode(self.id)

class TaskResponsiblePeople(models.Model):
    task = models.ForeignKey('Tasks', models.DO_NOTHING)
    auth_user = models.ForeignKey(User, models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'task_responsible_people' 

表格

class TaskResponsiblePeopleForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(TaskResponsiblePeopleForm, self).__init__(*args, **kwargs)
        for field_name, field in self.fields.items():
            field.error_messages={'required':  'Придется не поленится и заполнить это поле...'}
            field.widget.attrs['class'] = 'form-control'
            field.required = True

class Meta:
    model=TaskResponsiblePeople
    fields = ('auth_user',)

class TaskForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(TaskForm, self).__init__(*args, **kwargs)

    self.fields['description_short'].widget.attrs.update({'class': 'form-control input-sm'})
    self.fields['description_full'].widget.attrs.update({'class': 'form-control'})
    self.fields['date_start'].widget.attrs.update({'class': 'form-control'})
    self.fields['type'].widget.attrs.update({'class': 'form-control'})

    self.fields['date_end'].widget.attrs.update({'class': 'form-control '})
    self.fields['is_important'].widget.attrs.update({'class': 'form-control'})

    self.fields['description_short'].required = True
    self.fields['description_full'].required = True
    self.fields['date_start'].required = True
    self.fields['date_end'].required = True    
    self.fields['is_important'].required = False

    for field_name, field in self.fields.items():
        if field.required == True: 
            field.error_messages={'required':  'Придется не поленится и заполнить это поле...'}

class Meta:
    model=Tasks
    fields = '__all__'
    exclude=['id','parent_id,', 'rgt', 'lft', 'parent_id', 'visible','children_are_visible','parents_number', 'children_number', 'effective_from', 'effective_to', 'status']

我得到ValueError: save() prohibited to prevent data loss due to unsaved related object 'task'。我花了几个小时尝试各种变体,但没有成功。任何想法都应该非常感激

编辑:添加模型


Tags: selfformidtruefieldfieldsmodelsrequired
1条回答
网友
1楼 · 发布于 2024-04-19 15:38:00

您的TaskResponsiblePeople具有不可为空的ForeignKeyTasks。因此,如果要保存由窗体的save方法隐式完成的TaskResponsiblePeople实例,则必须确保保存相关的Tasks实例(以便具有主键)。 从第一行中删除commit=False应该可以做到这一点,因为在窗体上调用save时,该标志会阻止保存模型实例。你知道吗

相关问题 更多 >