我需要通过他的'name'删除教授的解决方案:
class Profesor(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
name = models.CharField(max_length=200, null=True)
suername = models.CharField(max_length=200, null=True)
设想是在html页面上要求用户输入他想要删除的教授的名字然后在views。py中删除教授我怎么能做到呢?
我尝试创建表单,我得到'name':
class getName(forms.Form):
name = forms.IntegerField()
然后i views.py:
def obrisiProfesora(request):
form = getName()
if request.method=="POST":
form = getName(requst.POST)
form.save()
context = {'form':form}
profesor = Profesor.objects.filter(name=form.name)
return render(request, 'brisanje_profesora.html', context)
但我不知道如何继续下去
- 类名在Python中习惯地是
PascalCase
,因此getName
将是GetName
。然而,NameForm
可能更合适,因为它就是名称的形式。 - 类似地,函数习惯地是
snake_case
。 - 当模型中的
name
字段是CharField
时,为什么name字段是整数字段? form.save()
不是一个东西的形式,不是modelforms。也就是说,我不认为你已经非常努力地尝试了这段代码,因为它会在requst
不存在时崩溃,context
也没有定义。
总而言之,对于普通函数视图,您可能需要像
这样的内容class NameForm(forms.Form):
name = forms.CharField(required=True)
def delete_professor(request):
form = NameForm(data=(request.POST if request.method == "POST" else None))
if form.is_bound and form.is_valid():
professor = Profesor.objects.get(name=form.cleaned_data["name"])
professor.delete()
return render(request, 'brisanje_profesora.html', context)
或者使用基于类的视图(因此您不需要自己做那么多工作),
class DeleteProfessorView(FormView):
form_class = NameForm
template_name = 'brisanje_profesora.html'
def form_valid(self, form):
professor = Profesor.objects.get(name=form.cleaned_data["name"])
professor.delete()
两个解决方案都省略了一些错误处理。