2013-03-17 3 views
1

Я не 100%, как это работает, новичок в Django. Я хочу указать все контакты first_name, принадлежащие моей группе. Я загружаю группу только для того, чтобы сэкономить время на БД дважды. Мне было предложено использовать select_related для достижения этого. ниже - это то, что я пробовал. Может кто-нибудь объяснить, что я делаю неправильно? Спасибо.Модели Django, как использовать 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) 

часть м 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 %} 

ответ

0

Вы можете сделать например:

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

См. example на этой странице про похожие объекты. (раздел «Доступ к значениям внешнего ключа»)

select_related используется для JOIN на уровне базы данных.

Описано get_object_or_404here.

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 
+1

не совсем то, что я был после того, что я пытаюсь сделать это в контексте select_related. – MarkO

+0

@MarkO get_object_or_404 ожидает получить модельный класс. –

+0

Как контакт не в FK в групповом столе, как группа знает об этом? – MarkO

Смежные вопросы