Иметь URL с pk или id для перенаправления на страницу обновления в сообщении об ошибке Django - PullRequest
0 голосов
/ 23 октября 2019

Я создал приложение, и на странице CreateView отлично работает кнопка «Отправить», чтобы создать новую ссылку S. Я также создал сообщение об ошибке, если входное значение соответствует существующей ссылке. Я создал кнопку в части сообщения об ошибке и попытался связать ее, чтобы обновить страницу, чтобы обновить эти справочные поля, например, основной контакт. Я перепробовал много вариантов, но не получил правильный код для аргумента с pk или id, чтобы получить страницу обновления отдельной записи.

это URL в сообщении об ошибке.

Я пробовал довольно мало вариантов pk, id, ни один из них не работает.

'pk'=self.pk; 

{'pk'=self.pk};

 object.id 

некоторый код, как показано ниже

models.py

class LNOrder(models.Model):

reference_number = models.CharField(max_length=15,blank=True, null=True, unique=True, error_messages={'unique':"This reference already exists."})


primary_contact = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)

urls.py

urlpatterns = [

    path('lfcnotifier', LNCreateView.as_view(), name='lnorder_create'), 
    path('lfcnotifier/<int:pk>', LNDetailView.as_view(), name='lnorder_detail'),
    path('lfcnotifier/<int:pk>/update/', LNUpdateView.as_view(), name='lnorder_update'),
]

template

<div class="input-group mb-3">
  <div class="input-group-prepend w-225px">
  <label class="input-group-text w-100">S Reference</label>
  </div>
  <input name="reference_number" type="text" class="form-control" placeholder="Enter your S Reference"/>

  <button class="btn btn-primary cardshadow " data-toggle="tooltip" title="Click to submit" style="width:200px;" type="submit">submit</button>

{%for field in form %}

{% for error in field.errors %}

{{ error }} <a href="{% url 'lnorder_update' 'pk'=self.pk %}"  class="shadow-sm col-sm-4 btn-block btn btn-primary mt-0">Update Request</a>

{% endfor %}

{% endfor %}

Views.py

class LNCreateView(SuccessMessageMixin,LoginRequiredMixin,CreateView):

    model = LNOrder

    template_name = 'lfcnotifier/lnorder_create.html'

    form_class = LNOrderForm

    def form_valid(self, form):
            form.instance.created_by = self.request.user
            return super().form_valid(form)    

Я ожидаю, что когда пользователь нажмет на кнопку «Запрос на обновление», он откроетобновите страницу, чтобы отредактировать отдельную ссылку.

, но я получил сообщение "Не удалось разобрать остаток: '= self.pk' из '' pk '= self.pk'". Я получаю немного другие сообщения, когда я пробую вышеупомянутые различные варианты.

Я хотел бы иметь правильный код для URL-адреса, чтобы обновлять страницу при нажатии кнопки «Запрос на обновление».

Спасибо,

Дополнительный фон, я поставил только некоторыекода шаблона здесь, чтобы сэкономить место. Они находятся в разделе формы. Если я использую следующий код

<a href="{% url 'lnorder_list' %}" class="shadow-sm col-sm-4 btn-block btn btn-primary mt-0">Update Request</a>

вместо

<a href="{% url 'lnorder_update' 'pk'=self.pk %}"  class="shadow-sm col-sm-4 btn-block btn btn-primary mt-0">Update Request</a>

, он может открыть страницу полного списка без проблем. Я могу перейти на страницу обновления со страницы полного списка без проблем. Но я хочу открыть страницу обновления отсюда напрямую, кроме как сделать еще один шаг.

1 Ответ

0 голосов
/ 23 октября 2019

Это все виды путаницы.

Для начала, вы не можете использовать строку в левой части выражения, как в чистом Python, так и в шаблонах Django.

Но, во-вторых, у вас там нет ничего под названием self. То, что у вас есть, будет передано из поля зрения;однако из кода, который вы опубликовали, не ясно, какой это фактический вид. Это не похоже на CreateView, потому что вы ссылаетесь на обновление. Но если предположить, что это на самом деле LNDetailView, и предположить, что это на самом деле DetailView, у вас есть доступ к текущему объекту в шаблоне точно так же, как object.

Итак, вы бы сделали:

{% url 'lnorder_update' pk=object.pk %}

Однако опять же, на самом деле нет смысла это делать. Вы не можете отправить форму через a. Вам нужен элемент <form> с кнопкой.

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