django表2显示外部模型为LinkColumn

时间:2013-03-12 15:05:36

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

在Django中,我有一个模型'Event',它有一个名为'messplatz'(DB-Id)的字段,它引用另一个位于不同数据库的表。由于Djangos 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'定义自定义render-method来实现(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-table的LinkColumn时,我也无法实现(1),因为你不能同时使用LinkColumn和custom_render方法。 / p>

有人有想法吗?提前致谢

1 个答案:

答案 0 :(得分: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)

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