2011-06-05 73 views
1

合并两个查询我有两个未绑定模型:如何从不相关的模型

class News(models.Model): 
    name = models.CharField(max_length=255, blank=True, null=True) 
    text = models.TextField(blank=True, null=True) 
    country = models.IntegerField(max_length=255, blank=True, null=True) # 1, 2, 3, etc. 

class Countries(models.Model): 
     name = models.CharField(max_length=255, blank=True, null=True) # USA, Canada 

我知道这是肮脏的代码,我应该使用ForeignKey但不幸的是,我无权触碰models.py文件。

如何将它组合成一个列表?

def show_news(request): 
    news_list = News.objects.all() 
    countries_list = Countries.objects.all() 
    # like news_list = news_list + countries_list 
    return render(request, 'table_adsl.html', {'news_list': news_list}) 

,并显示在模板:

{% for news in news_list %} 
    <h2>{{news.title}} - {{news.country}}</h2> 
    ... 
{% endfor %} 

并获得这样的:<h2>Beer Festival - Germany</h2>

回答

2

据我所知,News.country是指Country.id。所以,你可以做这样的事情:

def show_news(request): 
    news_list = News.objects.all() 
    countries_list = Countries.objects.all() 
    countries = dict([(c.id, c.name) for c in countries_list]) 
    for n in news_list: 
     n.country_name = countries.get(n.country, '(no country)') 
    return render(request, 'table_adsl.html', {'news_list': news_list}) 

{% for news in news_list %} 
    <h2>{{news.title}} - {{news.country_name}}</h2> 
    ... 
{% endfor %} 

做它在数据库中会更快,但是这是一个简单的方法和过早的优化...