Django - получать данные из формы и возвращать пользователю, чтобы он мог редактировать/удалять их
Новичок в Django и делаю систему бронирования ресторанов. У меня все идет в базу данных, но теперь я пытаюсь вернуть информацию обратно пользователю, в идеале в виде формы, похожей на ту, что у меня есть, чтобы он мог редактировать или удалить бронирование.
Мой код на данный момент выглядит следующим образом:
models.py:
class Reservations(models.Model):
reservation form categories and attributes
name = models.CharField(max_length=50)
phone_number = models.CharField(validators=[phoneNumberRegex], max_length=16,
unique=True)
email = models.EmailField()
date = models.DateField()
time = models.CharField(choices=time_options, default="12pm", max_length=10)
number_of_party = models.IntegerField(choices=party_size, default=1)
reservation_id = models.UUIDField(primary_key=True, default=uuid.uuid4,
editable=False, max_length=15)
class Meta:
ordering = ['date']
verbose_name = 'Reservation'
verbose_name_plural = 'Reservations'
def __str__(self):
return self.name
Тогда моя форма выглядит следующим образом:
form.py:
class ReservationForm(forms.ModelForm):
class Meta:
model = Reservations
fields = ['name', 'phone_number', 'email', 'date', 'time', 'number_of_party']
widgets = {
'date': DatePickerInput(format='%d-%m-%Y'),
}
Тогда я думаю, где я действительно теряюсь, так это во взглядах.
view.py:
class ReservationsFormView(CreateView):
model = Reservations
template_name = "reservations/reservations.html"
form_class = ReservationForm
success_url = "reservation_complete/"
def form_valid(self, form):
return super().form_valid(form)
class EditReservationView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Reservations
template_name = "reservations/edit_reservations.html"
form_class = ReservationForm
success_url = "reservation_complete/"
def test_func(self):
return self.request.user == self.get_object().user
class ReservationCompleteView(CreateView):
template_name = "reservations/reservation_complete.html"
success_url = "/reservation_complete/"
form_class = ReservationForm
model = Reservations
class ReservationAccountView(TemplateView):
template_name = "reservations/reservations_account.html"
class DeleteReservationView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
""" A view to delete an reservation """
model = Reservations
success_url = "/reservations/"
def test_func(self):
return self.request.user == self.get_object().user
По сути, если кто-то может помочь мне извлечь данные и представить их пользователю в html-файле, я буду очень признателен. Многие материалы в интернете не используют представления на основе классов, но я начинаю с этого, так что продолжаю в том же духе. Извините за многословный код. Заранее спасибо
Хотя Django's Edit, Create и т.д. представления быстры и полезны, я нахожу их трудными для манипулирования, особенно если я не использовал их некоторое время. Я рекомендую привыкать к написанию собственных представлений, так вы сможете задать любое действие, которое вы хотите, чтобы выполняло представление.
Допустим, ваш URL выглядит следующим образом - edit/4281ee81-a12a-4a0f-8928-2d9639903bd7/
forms.py
class EditReservationForm(forms.Form):
name = forms.CharField()
email = forms.EmailField()
views.py
class EditReservationView(LoginRequiredMixing, View):
def get(self, request, *args **kwargs):
reservation = Reservations.objects.get(uuid=kwargs['uuid'])
form = EditReservationForm(initial={"name": reservation.name, "email": reservation.email})
return render(request, "reservation/edit-reservation.html", {"form": form})
Теперь у вас есть привязанная форма к данным конкретного бронирования. Надеюсь, это поможет. А больше информации об исходных данных здесь - инициальные значения формы