Я буквально застрял в этой петле на несколько дней.редактировать / обновить не удается обнаружить ПК модели? я должен отправить билет? - PullRequest
0 голосов
/ 10 июля 2019

ошибка:

.Reverse for 'patient_update' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['patients/update/(?P<pk>[0-9]+)$']?

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

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

Просмотры.py

def PatientUpdateView(request,pk=None):
   patient = get_object_or_404(models.Patient, pk=pk)
   form = forms.PatientForm(request.POST or None ,instance=patient)
   if form.is_valid() :
       patient = form.save(commit=False)
       patient.save()
       messages.success(request,"patient updated!")
       context = {
        'patient': patient,
        'form': form
    }
       return render(request,'patients/patient_edit_form_success.html',context)
   else:
       context = {
        'patient' : patient,
        'form': form,
               }
       return render(request, 'patients/patient_edit_form.html', context)

и вот как я называю это в теге привязки

<a class="btn btn-info btn-sm" href="{% url 'patients:patient_update' patient.pk %}">Open</a>

Я пробовал

pk = patient.pk
pk = pk
pk={{ patient.pk}}

и многие другие способы его вызова.

urls.py вот шаблон URL, который я использую

path('update/<int:pk>', views.PatientUpdateView, name='patient_update'),

Я пытался использовать метод URL в шаблоне URL

Я даже пытался использовать представление на основе классов, так что выесть идеи, как я могу это исправить?

дополнительная информация

tables.py

class PatientTable(tables.Table):

FirstName = tables.Column(linkify=("patients:patient_detail", {"pk": tables.A("pk")}))
LastName = tables.Column(linkify=("patients:patient_detail", {"pk": tables.A("pk")}))
Telephone_no = tables.Column(linkify=("patients:patient_detail", {"pk": tables.A("pk")}))
# delete = tables.LinkColumn('patients:patient_delete', args=[A('pk')], attrs={
# 'a': {'class': 'btn'}
# })
# update = tables.LinkColumn('patients:patient_update', args=[A('pk')], attrs={
# 'a': {'class': 'btn'}
# })
edit = TemplateColumn(template_name='patients/edit_btn.html')
# delete = TemplateColumn(template_name='patients/patient_delete.html')

class Meta:
    model = Patient
    attrs = {'class': 'table table-striped table-hover'}
    exclude = ("user", "Notes", "Adress")
    template_name = 'django_tables2/bootstrap4.html'

и представление списка

def Patients_list(request):
patients = Patient

table = PatientTable(patients.objects.filter(user=request.user))
RequestConfig(request).configure(table)

return render(request, 'patients/patients_list.html',{
'table' : table
})

и вHTML-файл представления списка:

{% extends 'base.html' %}
{% load render_table from django_tables2 %}

{% block content %}


<style>

#content{

margin-left : 18%;
margin-right : 2%;

}

</style>


<div id="content">

    {% if user.is_authenticated %}

    <h1> Patients list: </h1>
    <br>

    <a href="{%url 'patients:patient_create'%}" class="btn btn-info" role="button">Add Patient</a>
    <br>
    <br>

    {% render_table table %}


    {% else %}

      <h2>please login</h2>

    {% endif %}

  {% endblock %}

</div>

пациент edit_form.html

{% extends 'base.html' %}
{% load crispy_forms_tags %}

#content{

margin-top: 100px;
margin-left : 18%;
margin-right : 2%;

}
{% block content %}

<div id="content">

         <h2>Add Patient</h2>
            <form method="POST" >

                {% csrf_token %}
                 {{ form|crispy }}

                <button type="submit" class="btn btn-primary" >Update</button>
                                <p></p>
            </form>
</div>
    {% endblock %}

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Я использовал это в моем tables.py, и это сработало:

 edit = tables.LinkColumn('patients:patient_update',text='Edit', args=[A('pk')], attrs={
    'a': {'class': 'btn btn-primary'}
    })
0 голосов
/ 10 июля 2019

Обязательно используйте параметр accessor. Поместите в ваш класс PatientTable следующее (при условии, что вы используете pk в качестве аргумента ключевого слова в ваших URL):

update = tables.Column(accessor='pk', linkify=("patients:patient_update", {"pk": tables.A("pk")}))

Если вы хотите изменить способ визуализации, вы можете написать функцию, например:

def render_update(self, record):
    return record.first_name # or any other patient attribute or anything else
...