2015-10-19 70 views
0

我想在我的模板中顯示來自不同模型的數據,我不知道爲什麼它不能正常工作。在Django模板中的向後關係

Models.py:

class Company(models.Model): 
name = models.CharField(max_length=100) 

class Location(models.Model): 
company = models.ForeignKey('Company', 
    related_name='locations') 

Views.py:

def sth(request): 
    loc_list = Location.objects.all() 
    return render(request, 'blabla/index.html', {'loc_list': loc_list}) 

模板:

{% for loc in loc_list %} 
    {% for entry in loc.company_set.all %} 
     {{entry.name}} 
    {% endfor %} 
{% endfor %} 

爲什麼公司的名稱沒有顯示?

+0

您模型從django.db進口models'進口'? – MohitC

回答

2

你外鍵關係大約是走錯了路......你當前定義它們的方式,一個Location只能有一個Company與它相關聯,但在你的模板您要取的Company的List。

您的模板邏輯的工作,你的模型就必須定義如下:

class Company(models.Model): 
    name = models.CharField(max_length=100) 
    location = models.ForeignKey('Location') 

class Location(models.Model): 
    # You probably need some other fields in here. 

那麼這會工作:

{% for loc in loc_list %} 
    {% for entry in loc.company_set.all %} 
     {{entry.name}} 
    {% endfor %} 
{% endfor %} 
1

只能用「_set」訪問倒退時的關係。沒有

loc.company_set.all 

,因爲每個位置只有一個公司(即一個ForeignKey是什麼。你可以通過做loc.company訪問該位置的公司)。如果您想要位置擁有多個公司,請參閱solarissmoke的答案(您將ForeignKey屬性放在公司而不是位置),或使用ManyToManyField關係(這將允許公司擁有多個位置,並且每個位置可以擁有多個公司) 。

然後你就可以在模板做這個訪問給定位置的所有公司:

{% for loc in loc_list %} 
    {% for entry in loc.company.all %} 
     {{entry.name}} 
    {% endfor %} 
{% endfor %} 

您也可以通過使用related_name(company.locations)訪問給定公司的所有位置。

1

簡短的回答:

{% for loc in loc_list %} 
    {{loc.company.name}} 
{% endfor %}