Django模型如何使用select_related

时间:2013-03-17 17:54:01

标签: django django-models

我不是100%这对Django来说是新手的。我想列出属于我的组的所有联系人first_name。我只加载组以保存击中DB两次我被告知使用select_related来实现这一点。以下是我的尝试。有人可以解释一下我做错了什么吗?谢谢。

model.py

class Group(models.Model):
    name = models.CharField(max_length=60)
    user = models.ForeignKey(User, related_name="user")

class Contact(models.Model):
    first_name = models.CharField(max_length=60)
    group = models.ForeignKey(Group)

m view.py

的一部分
 if id:
        # If we have an id try and get it and populate instance.
        group = get_object_or_404(Group.objects.select_related(), pk=id)
        show_upload = True
        # If we have an instance check that it belongs to the login.
        if group.user != request.user:
            return HttpResponseForbidden()

模板的一部分我试图列出联系人first_name

 {% for item in group.contact %}
        <tr>

        {{ item.first_name }}


        </tr>
    {% endfor %} 

1 个答案:

答案 0 :(得分:0)

你可以这样做:

group_instance.contact_set.all().values_list('first_name',flat=True)

请参阅此页面上的example有关相关对象的信息。 (“访问外键值”部分)

select_related用于数据库级别的JOIN。

使用get_object_or_404描述了here

def my_view(request):
    my_object = get_object_or_404(MyModel, pk=1)

相当于

def my_view(request):
    try:
        my_object = MyModel.objects.get(pk=1)
    except MyModel.DoesNotExist:
        raise Http404