【发布时间】:2020-09-18 04:27:23
【问题描述】:
我只想更新模型中的特定字段。 这是我的models.py
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to='teacher/images')
phone = models.CharField(max_length=15)
address = models.CharField(max_length=25)
salary = models.DecimalField(max_digits=20, decimal_places=2)
joindate = models.DateField(auto_now_add=True)
status = models.BooleanField(default=True)
这是我的forms.py
class TeacherForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'password']
class TeacherExtraForm(forms.ModelForm):
class Meta:
model = models.Teacher
fields = ['phone', 'address', 'salary', 'status', 'image']
这是我的观点.py
def update_teacher(request, pk):
teacher = models.Teacher.objects.get(id=pk)
user = models.User.objects.get(id=teacher.user_id)
form1 = forms.TeacherForm(instance=user)
form2 = forms.TeacherExtraForm(instance=teacher)
context = {
'teacher': teacher,
'user': user,
'form1': form1,
'form2': form2
}
if request.method == 'POST':
form1 = forms.TeacherForm(request.POST, instance=user)
form2 = forms.TeacherExtraForm(request.POST, instance=teacher)
if form1.is_valid() and form2.is_valid():
user = form1.save(commit=False)
user.save(update_fields=['first_name', 'last_name', 'email', 'username'])
f2 = form2.save(commit=False)
f2.status = True
f2.save(update_fields=['phone', 'address', 'salary', 'status'])
return redirect('Teacher:teacher_index')
return render(request, 'Teacher/update_teacher.html', context)
这里我只想更新名字、姓氏、电子邮件、用户名、电话、地址、薪水和状态,而不影响密码和图像字段。当我也添加密码和图像字段时,它可以工作,但我不想在这里更新密码和图像。
【问题讨论】:
-
从
TeacherForm中删除字段。 -
那么如何在添加时为老师创建密码和图像。
-
这能回答你的问题吗? Django partial update
-
@sd077:您制作了两个表单,一个用于创建,一个用于更新。
标签: django