2013-03-27 1 views
0

Я хочу сделать несколько соединений с использованием tables2 в ДжангоДжанго tables2 Регистрация

--- models.py (abbrev.) 

from django.db import models 
import django_tables2 as tables2 

class Architecture (models.Model): 
    architecture_id = models.AutoField(primary_key=True) 
    architecture_name = models.CharField("Architecture",max_length=20) 
    architecture_comment =models.CharField("Comments",null=True,blank=True,max_length=200) 

class Server (models.Model): 
    server_id = models.AutoField(primary_key=True) 
    server_name = models.CharField("Server Name",max_length=200,unique=True) 
    server_ip = models.IPAddressField("Server IP") 
    server_serial = models.CharField("Serial No.",max_length=25,null=True,blank=True) 
    server_mem = models.PositiveIntegerField("Mem (MB)",null=True,blank=True) 
    server_architecture = models.ForeignKey(Architecture) 

class ServersTable(tables2.Table): 
    architecture = tables2.Column(accessor='architecture.architecture_name') 


--- views.py 

from django.http import HttpResponse 
from servers.models import Server 
from django.shortcuts import render 

def index(request): 
    return render(request, "index.html", {"server": Server.objects.all()}) 

--- index.html 
{% load render_table from django_tables2 %} 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8" /> 

<link rel="stylesheet"  href="http://myhost/django_tables2/themes/paleblue/css/screen.css" /> 
<title>myhost</title> 
</head> 
<body> 
{% render_table server %} 
</body> 

Результаты:

в колонке Архитектура она показывает .... "Архитектура объекта" для каждый экземпляр, где должно быть имя_источника

Как я могу заставить «JOINS» работать? Спасибо.

+0

Для получения архитектуры модели вернуть имя архитектуры добавить что-то вроде 'четкости __unicode __ (сам): \ п \ т Самовозврата .architecture_name' в классе архитектуры. Я думаю, что это должно сработать. –

+0

Это замечательно! Это работает для одного столбца. ... теперь, как мне вернуть более одного столбца? –

+0

Помните, что вы можете вернуть любую форматированную строку. Поэтому давайте скажем, что вы хотите «вернуть»% s,% s «% (self.architecture_name, self.architecture_comment)». Я думаю, вы поняли. Если не дайте мне знать. –

ответ

2

Для получения архитектуры модели вернуть имя архитектуры добавить что-то вроде

def __unicode__(self): 
    return self.architecture_name 

по классу архитектуры. Я думаю, что это должно сработать. Кроме того, если вы хотите вернуть несколько столбцов

def __unicode__(self): 
    return "%s, %s" % (self.architecture_name, self.architecture_comment) 

Помните, что вы можете вернуть любую отформатированную строку