2

我有两个 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 页面中的两个表中获取并显示详细信息(姓名、电子邮件、公司、工作、经验)。

4

4 回答 4

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 %}
于 2013-04-05T01:28:42.390 回答
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视图模板标签

于 2013-04-04T17:35:58.480 回答
1

首先得到一个personal_details列表(经验等于9),如下所示:

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

之后你可以访问每个元素的reg属性,它会给你相应的registration对象

于 2013-04-04T13:45:49.267 回答
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
于 2013-04-04T13:42:00.107 回答