2

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

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 方法。

有人有想法吗?提前致谢

4

1 回答 1

0

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

我使用了 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)

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

于 2013-03-12T15:42:42.400 回答