4

django-tables2 で 2 つの linkColumns を持つテーブルを作成しようとしています。リンクにはモデル クラスの pk が含まれています。リンクは、編集フォームと削除フォームを指しています。

models.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')

urls.py

from django.conf.urls import patterns, url
from accounts import views

urlpatterns = patterns('',
    url(r'^person/list/$', views.PersonList.as_view(), name='person_list'),
    url(r'^person/add/$', views.PersonAdd.as_view(), name='person_add'),
    url(r'^person/(?P<pk>\d+)/update/$', views.PersonUpdate.as_view(), name='person_update'),
    url(r'^person/(?P<pk>\d+)/delete/$', views.PersonDelete.as_view(), name='person_delete'),
)

ビュー.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')

これは厳密には必要ではありませんが、念のため含めます

templates/accounts/person_list.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

templates/accounts/person_form.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名の評判が必要なので、画像を投稿できません...

テーブル画像

また、国際化をサポートするリンクのテキスト (それぞれ「編集」と「削除」) を指定する必要があります (リンク内のテキスト用)。

誰でもこれを行う方法を知っていますか?

前もって感謝します

4

2 に答える 2

2

少し遅い回答ですが、次の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',)
于 2013-08-21T11:17:48.730 に答える
0

Django-tables2自体とJqueryの組み合わせでこの問題を解決しました。

テーブルにリンクを表示するために、列定義にaccessor='pk'を追加しました。

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

これで、テキストとしてID 番号を含むリンクが作成されますが、これはお勧めできません。

Django-tables2 でリンク テキストを指定する方法が見つかりませんでしたが、Jquery を使用すると可能です。この目的のために、次のようにリンクのクラスを追加します。

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

次に、html に以下を追加します。

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

この助けを願っています!

于 2014-01-05T17:42:59.820 に答える