【问题标题】:django tables 2 display foreign model as LinkColumndjango 表 2 将外部模型显示为 LinkColumn
【发布时间】:2013-03-12 15:05:36
【问题描述】:

在 Django 中,我有一个模型“事件”,它有一个名为“messplatz”(DB-Id)的字段,它引用位于不同数据库上的另一个表。由于 Django 的 foreignKey-field 无法使用多个数据库,因此字段 'messplatz' 是一个 Integerfield,存储引用的 'Messplatz' 的 PK-Value:

class Event(models.Model):
    messplatz = models.Integerfield()

我遇到的问题是使用 django-tables 2 表示模型事件:

模型“Messplatz”在“prodis”应用程序中定义,该应用程序路由到不同的数据库。 我的看法如下:

def eventList(request):
    table = EventTable(Event.objects.all())
    RequestConfig(request).configure(table)
    return render(request, 'mkv/eventList.html', {'table': table})

在视图中,我希望“Messplatz”字段显示实际 Messplatz-Object (1) 的名称。此外,我希望它成为另一个视图 (2) 的链接。 我可以通过在 tables.py 中为字段“messplatz”定义自定义渲染方法来实现(1):

from prodis.models import Messplatz

class EventTable(tables.Table):

    class Meta:
        model = Event

def render_messplatz(self):
    return '%s' % Messplatz.objects.get(id=self.messplatz) 

但是对于(2)我不知道。如果我将自定义渲染方法更改为

def render_messplatz(self):
    return '<a href="...">%s<a>' % Messplatz.objects.get(id=self.messplatz) 

链接标签被django-tables显示为纯文本2.当我使用django-tables的LinkColumn时,我也无法实现(1),因为你不能同时使用LinkColumn和custom_render方法。

有人有想法吗?提前致谢

【问题讨论】:

    标签: django model foreign-keys multiple-databases django-tables2


    【解决方案1】:

    以某种方式让它工作。但是,这是一个非常糟糕的解决方案,我将不胜感激。

    我使用了 django-tables2 模板列:

    class EventTable(tables.Table):
        #override messplatz-column
        messplatz = tables.TemplateColumn('{% load url from future %}<a href="{% url \'messplatz_events\' record.messplatz %}">{{ record.get_messplatz }}</a>')
        #Hint: {% load url from future %} is only needed for django versions < 1.5
    
        class Meta:
            model = Event
    

    要访问 record.get_messplatz,我必须将 get_messplatz 方法移至 Event-Model:

    from prodis.models import Messplatz
    
    class Event(models.Model):
        messplatz = models.IntegerField()
    
        def get_messplatz(self):
            return Messplatz.objects.get(mpl_id=self.messplatz)
    

    不会将此标记为解决方案,因为我认为这是一个非常糟糕的解决方案。但我希望这个答案会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 2017-10-12
      相关资源
      最近更新 更多