如何在基于Django的表2中添加基于Django的表1中的Django

2024-06-06 12:58:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用django-tables2创建一个包含2个linkColumns的表,这些链接包括model类的pk。 这些链接指向编辑和删除表单。在

在模型.py在

from django.db import models
from django.utils.translation import ugettext_lazy as _

class Person(models.Model):
    first_name = models.CharField(_('first name'), max_length=200, blank=False)
    last_name = models.CharField(_('last name'), max_length=200, blank=False)

   class Meta:
       verbose_name = _('person')
       verbose_name_plural = _('persons')

在网址.py在

^{pr2}$

在视图.py在

from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from django_tables2 import SingleTableView
from accounts.tables import PersonTable
from accounts.models import CreditCardTransaction, Person

class PersonAdd(CreateView):
    model = Person
    template_name = 'accounts/person_form.html'
    success_url = reverse_lazy('accounts:person_list')

class PersonDelete(DeleteView):
    model = Person
    template_name = 'accounts/person_form.html'
    success_url = reverse_lazy('accounts:person_list')

class PersonUpdate(UpdateView):
    model = Person
    template_name = 'accounts/person_form.html'
    success_url = reverse_lazy('accounts:person_list')

class PersonList(SingleTableView):
    model = Person
    template_name = 'accounts/person_list.html'
    table_class = PersonTable
    def get_table_data(self):
        return Person.objects.all();

在表格.py在

import django_tables2 as tables
from django_tables2.utils import A
from accounts import models

class PersonTable(tables.Table):
    edit_link = tables.LinkColumn('accounts:person_edit', args=[A('pk')], verbose_name='edit',)
    delete_link = tables.LinkColumn('accounts:person_delete', args=[A('pk')], verbose_name='delete',)

    class Meta:
        model = models.Person
        attrs = {"class": "paleblue"}
        fields = ('first_name', 'last_name', 'edit_link', 'delete_link')

这不是绝对必要的,但我把它包括在内以防万一

模板/账户/人员_列表.html在

{% load render_table from django_tables2 %}
{% load static %}
<!DOCTYPE HTML>
<html>
<head>
    <link rel="stylesheet" href="{% static 'django_tables2/themes/paleblue/css/screen.css'%}" />
</head>
<body>
   <p>
       <a href="{% url 'accounts:person_add' %}">Add</a>
   </p>
    <p>
       {% render_table table %}
    </p>
</body>
</html

模板/账户/人员_表单.html在

<!doctype HTML>
<html>
<head>
</head>
<body>
    <form action="." method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" name="add" value="Add">
    </form>     
</body>
</html>

我不知道为什么表没有显示链接。 每个示例(和问题)都覆盖一个模型列,但我需要添加额外的列。在

我不能张贴图像,因为我需要至少10个声誉。。。在

table image

还需要指定支持国际化的链接文本(分别为Edit和Delete)。在

有人知道怎么做吗?在

提前谢谢


Tags: djangonamefromimportformmodelmodelshtml
2条回答

我用Django-tables2本身和Jquery的组合解决了这个问题。在

为了让表显示链接,我在列定义中添加了accessor='pk'

edit_link = tables.LinkColumn('accounts:person_edit', args=[A('pk')], verbose_name='edit', accessor='pk')

现在,您应该将id numbers作为文本链接,这不是一个好主意。在

我没有找到通过Django-tables2指定链接文本的方法,但是使用Jquery这是可行的。为此,请为链接添加类,如下所示:

^{pr2}$

然后,在html中添加以下内容:

<script type="text/javascript">
    $(document).ready(function(){
        $(".edit_link").text('Edit');
    });
</script>

希望帮助这个!在

晚一点回答,但我建议从表链接中删除accounts:前缀,如下所示:

edit_link = tables.LinkColumn('person_edit', args=[A('pk')], verbose_name='edit',)
delete_link = tables.LinkColumn('person_delete', args=[A('pk')], verbose_name='delete',)

相关问题 更多 >