Решение для удаления по "имени"

Мне нужно решение для удаления профессора по его "имени":

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 удалить Профессора по этому 'ime'. Как я могу это сделать?

Я пытаюсь создать форму, где получаю 'name':

class getName(forms.Form):
    name = forms.IntegerField()

А затем я 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?
  • form.save() не является вещью для форм, которые не являются модельными формами. Учитывая это, я не думаю, что вы пробовали этот код, так как он потерпел бы крах из-за того, что 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()

В обоих решениях исключена некоторая обработка ошибок.

Вернуться на верх