2013-04-04 30 views
2

檢索數據我有兩個MySQL型號:Django的多個表

class registration(models.Model): 
    name = models.CharField(max_length=30) 
    email = models.EmailField() 
    password = models.CharField(max_length=30) 
    company = models.CharField(max_length=30) 


class personal_details(models.Model): 
    reg = models.ForeignKey(registration) 
    job = models.CharField(max_length=30) 
    experience = models.IntegerField(default=0) 

我想過濾同時使用經驗和公司作爲關鍵字的詳細信息。我想從我的HTML頁面的兩個表格中獲取並顯示詳細信息(姓名,電子郵件,公司,工作,經歷)。

+0

請詳細解釋您的問題!那是什麼? – boomz 2013-04-04 13:52:39

回答

2
details = personal_details.objects.filter(experience=1, 
    reg__company="YourCompany").select_related() 

{% for detail in details %} 
    Name: {{ detail.reg.name }} 
    Email: {{ detail.reg.email }} 
    Company: {{ detail.reg.company }} 
    Job: {{ detail.job }} 
    Experience: {{ detail.experience }}<br/> 
{% endfor %} 
+0

它沒有工作..工作只顯示名稱和電子郵件不顯示..給一些更多的提示.. – user 2013-04-05 04:28:41

+0

哦對不起,它必須是'reg'不'註冊' – catherine 2013-04-05 04:43:15

+0

謝謝我已更新我的問題,請參考併發布您的答案 – user 2013-04-05 05:10:04

0

不知道你想要什麼數據,但你可以通過兩種方式從personal_details對象的ForeignKey關係中獲取數據。

具有反向關係,通過_set去,我只是從這裏臀部射擊:

reg = registration.objects.get(pk=1) 
print reg.personaldetails_set.job 

否則,通過正常的FK方式。

details = personal_details.objects.get(pk=1) 
print details.reg.name 
1

首先得到personal_details的名單(有經驗QUAL 9)所示:

p_details_list = personal_details.objects.filter(experience=9) 

那之後,你可以存取權限的每個元素的reg屬性,它會給你相應的registration對象

+1

查詢集上有一個'select_related'方法,將從兩個表中獲取數據。例如,在personal_details.objects.filter(experience = 9).select_related('reg')'上面會同時提取personal_details和註冊數據。 – Igor 2013-04-04 14:57:19

2

如果沒有您的問題更深入的解釋,很難正確回答您的問題,但這裏有:

一個選項:

# views.py 
def mypage(request): 

    details = Personal_details.objects.select_related().filter(experience=3) 
    names = [d.reg.name for d in details] 

    return render(request, 'mypage.html', {'names': names}) 

# html 

<p>People with 3 experience:</p> 
<ul> 
    {% for name in names %} 
     <li>{{ name }}</li> 
    {% empty %} 
     <li>Nobody has 3 experience!</li> 
    {% endfor %} 
</ul> 

另一種選擇:

# views.py 
def mypage(request): 

    details = Personal_details.objects.select_related().all() 
    names = [d.reg.name for d in details] 
    info = zip(details, names) 

    return render(request, 'mypage.html', {'info': info}) 

#html 

<ul> 
    {% for detail, name in info %} 
     {% if detail.experience == 0 %} 
      <li>{{ name }} has 0 experience</li> 
     %{ elif detail.experience == 1 %} 
      <li>{{ name }} has 1 experience</li> 
     # and so on and so forth.... 
     {% endif %} 
    {% endfor %} 
</ul> 

注意我如何資本化模型(即類)名稱。這是慣例,你應該堅持下去。

所以這可能是也可能不是你想要做的事情,它可能不是最好的方式去做,但希望它會讓你開始你自己的解決方案。我建議閱讀Django viewstemplate tags