我有两个MySQL模型:
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 :(得分:3)
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 %}
答案 1 :(得分: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 views和template tags。
答案 2 :(得分:1)
首先得到一个personal_details列表(经验质量为9),如下所示:
p_details_list = personal_details.objects.filter(experience=9)
之后,您可以访问每个元素的reg
属性,它会为您提供相应的registration
对象
答案 3 :(得分: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