我有一个Django应用,我想在其中显示用户条目表,用户可以通过按钮从表中删除/编辑条目。我使用django-tables2作为呈现表的库。
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 = TemplateColumn('<button type ="button" class ="btn btn-danger" data-toggle="modal" data-target="#modalDelete" >Deleta</button>',extra_context={'patient': 'Patient'})
class Meta:
model = Patient
attrs = {'class': 'table table-striped table-hover'}
exclude = ("user", "Notes", "Adress")
template_name = 'django_tables2/bootstrap4.html'
Views.py
def Patients_list(request):
patients = Patient.objects.all()
table = PatientTable(patients.filter(user=request.user))
RequestConfig(request).configure(table)
return render(request, 'patients/patients_list.html',{
'table' : table,
'patients':patients,
})
在视图中,我在上下文中将患者定义为可以在模板中调用,可以调用,但是我不能调用Patient.pk,它总是返回值错误。
模板
{% extends 'base.html' %}
{% load render_table from django_tables2 %}
{% block content %}
<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 %}
</div>
<div class="modal fade" id="modalDelete" tabindex="-1" role="dialog" aria-labelledby="modalDelete"
aria-hidden="true">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Delete patient!</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>Are you sure you want to delete this patient?</p>
</div>
<div class="modal-footer">
<form method="POST" action="{% url 'patients:patient_delete' pk=patients.pk %}">
{% csrf_token %}
<input class="btn btn-danger" value="Yes" type="submit" >
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
在此模板中,我收到此错误:
Reverse for 'patient_delete' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['patients/delete/(?P<pk>[0-9]+)$']
我尝试了
Patients.pk
pk
但是它不起作用,在模板中,我尝试制作一个for循环(删除c的形式后)以显示每个患者的名字在段落标签中,并且它也起作用,我还尝试制作一个用于删除的其他模板表单,它可以正常工作,但现在我想使删除表单成为可通过按钮调用的模式。
我的模特:
# Patient model each patient is uniquely identified by his doctor/user
class Patient(models.Model):
FirstName = models.CharField(max_length=264)
LastName = models.CharField(max_length=264)
Adress = models.TextField(blank=True, null=True)
Telephone_no = PhoneNumberField(blank=True, null=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,related_name='patients')
birth_date = models.DateField()
# Age = models.CharField(max_length=100,blank = True ,null = True)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Notes = models.TextField(blank=True, null=True)
def __str__(self):
return str(self.FirstName) + " " + str(self.LastName)
def get_absolute_url(self):
return reverse('patient_detail', kwargs={"pk": self.pk})
还有一个与此相关的模型,其中一个患者字段为ForiegnKey btw。
我尝试将用户的视图更改为推荐的视图,但这是相同的问题
新视图:
def Patients_list(request):
patients = Patient.objects.filter(user=request.user)
table = PatientTable(patients)
RequestConfig(request).configure(table)
return render(request, 'patients/patients_list.html',{
'table' : table,
'patients':patients,
})
建议是我无法从Patient.objects.all()
获取pk,因此我需要将它更改为带有get的形式,但是get没有起作用,所以我使用了过滤器。
我认为如果将其更改为CBV,它应该可以工作,但我真的不知道如何像定义普通CBV那样定义查询集来制作查询集。
我已经在这个问题上停留了10天,现在在许多论坛/站点上进行了询问,非常感谢您的帮助。
答案 0 :(得分:0)
实现我想要的唯一方法是通过进行for循环并遍历所有对象在模板中手动呈现表。