Решение для удаления по "имени"
Мне нужно решение для удаления профессора по его "имени":
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()
В обоих решениях исключена некоторая обработка ошибок.