Джанго доступ к ПК / Объект в URL - PullRequest
1 голос
/ 04 апреля 2019

У меня есть два класса - событие и тур.У раунда есть ограничение внешнего ключа для события, поэтому раунд связан с событием.

Теперь для создания раунда у меня есть следующий маршрут

<slug:slug_event>/new/

И для доступа к раунду

<slug:slug_event>/<int:pk_round>/

Чтобы сохранить раунд, мне нужно объявить событие.Так что в моем раунде / views.py у меня есть

fields = [..., 'event']

, и я могу выбрать событие, к которому будет прикреплен раунд.Но я бы не хотел иметь это поле события, потому что событие уже указано в URL.Поэтому я бы хотел что-то вроде

class RoundCreateView(CreateView):
    model = Round
    pk_url_kwarg = 'pk_round'
    fields = [...]

    def form_valid(self, form):
        form.instance.event = self.request.event #obviously this dosn't work
        return super().form_valid(form)

, поэтому мне не нужно указывать событие «дважды».

1 Ответ

1 голос
/ 04 апреля 2019

Вы можете извлечь событие из базы данных, используя слаг из URL:

def form_valid(self, form):
    event = get_object_or_404(Event, slug=self.kwargs['slug_event'])
    form.instance.event = event
    return super().form_valid(form)

Теперь вы можете удалить `'event' из полей формы.

Обратите внимание, что get_object_or_404 отобразит страницу 404, если событие не существует.Возможно, вы также захотите сделать get_object_or_404 для запросов GET, чтобы пользователь не заполнил форму для недопустимого слага, а затем получил ошибку 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...