1

OK、それで、'Roles' クラスを介して User に多対多の属性を持つ Item クラスがあります。現在のユーザーがそのロールにアタッチされている場合、アイテムにアタッチされているロールのうち、ロールの名前が表示されるように、アイテムのdjangoテーブルを作成しようとしています。それが何らかの意味を成すことを願っています。ここに私がこれまでに持っているものがありますが、テーブルクラスがリクエスト/ユーザーについてどのように知ることができるかがわからないため、実際にはうまくいくとは思っていませんでした。私は立ち往生しています。

models.py

class Item(models.Model):
    name    = models.CharField(max_length=255)
    owner   = models.ForeignKey(User, related_name='Owner')
    roles   = models.ManyToManyField(User, through='Role')
class Role(models.Model):
    role_type   = models.ForeignKey(RoleType)
    user        = models.ForeignKey(User)
    item        = models.ForeignKey(Item)

テーブル.py

class OwnedTable(tables.Table):
    roles = tables.Column()
    user = request.user
    def render_roles(self):
        for role in roles:
            if role.User == user:
                return role.role_type
            else:
                pass

    class Meta:
        model = Item
        attrs = {"class": "paleblue"}

        fields = ('id', 'name', 'owner', 'roles')
4

3 に答える 3

1

オーバーライドせずに認証ユーザーを使用する方法はないようです。

__init__次のように、テーブル クラスをオーバーライドできます。

class OwnedTable(tables.Table):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super(OwnedTable, self).__init__(*args, **kwargs)

次に、ビュー内で、次userのように引数を指定してテーブルを呼び出します

table = OwnedTable(Person.objects.all(), user=request.user)

self.user内部render_rolesメソッドを使用して、現在ログインしているユーザーを参照できるようになりました。

于 2013-10-24T21:12:20.123 に答える
0

別の解決策がhttps://github.com/bradleyayers/django-tables2/issues/156に示されています。これは、セットアップを調整した後にうまくいきました。

Person が Contacts への M2M を持ち、その Person のすべての連絡先を django-tables2 に表示したい場合、次のようにします。

class PersonTable(tables.Table):
    person_contacts = tables.Column(accessor="contacts", verbose_name="Contacts")

    def render_person_contacts(self, value, table):
        clist = ""
        cfirst = True

        conts = list(value.all())

        for c in conts:
            if not cfirst:
                clist += "<br />"
            else:
                cfirst = False

            print c.id
            uri = reverse('cont_detail', kwargs={'pk': c.id})
            clist += '<a href="' + uri + '">' + c.name + '</a>' + ' (' + c.relation + ')'

        return mark_safe(clist)

基本的に、存在しない名前の列を追加し、アクセサーを M2M フィールド名に設定してから、render_<newly_added_column>必要なものを取得する場所を呼び出しますvalue

于 2014-03-22T14:45:38.663 に答える