按"name"删除的解决方案



我需要通过他的'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()

两个解决方案都省略了一些错误处理。

相关内容

最新更新