我已经通读了所有与这个话题有关的讨论,但仍然不能找出问题所在。你知道吗
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'
。我花了几个小时尝试各种变体,但没有成功。任何想法都应该非常感激
编辑:添加模型
您的
TaskResponsiblePeople
具有不可为空的ForeignKey
到Tasks
。因此,如果要保存由窗体的save
方法隐式完成的TaskResponsiblePeople
实例,则必须确保保存相关的Tasks
实例(以便具有主键)。 从第一行中删除commit=False
应该可以做到这一点,因为在窗体上调用save时,该标志会阻止保存模型实例。你知道吗相关问题 更多 >
编程相关推荐