Заполните шаблоны, используя список, детализируйте общие представления - PullRequest
0 голосов
/ 25 ноября 2010

Я создаю список пользователей, присутствующих в моей базе данных, они отображаются в шаблоне user_list.html посредством использования общих представлений, но мои модели наследуют многие его свойства от других классов в модели.Теперь я хочу, чтобы, когда пользователь нажимал на свое имя, его перенаправляли на страницу user_detail.html и он получал здесь свои данные.Детали должны быть получены из базы данных, она просто выбирает значения из той же модели, для которой определен набор запросов.

my views.py выглядит как

from django.contrib.auth.models import User
   from django.shortcuts import render_to_response, get_object_or_404
   from django.views.generic.list_detail import object_list, object_detail

   from contacts.models import *

   def employee_list(request, queryset=None, **kwargs):
       if queryset is None:
          queryset = Employee.objects.all()
      return object_list(
          request,
          queryset=queryset,
          paginate_by=20,
          **kwargs)

  def employee_detail(request, employee_id):
      return object_detail(
          request,
          queryset= Employee.objects.all(),
         # extra_context ={"EC_list": EmergencyContact.objects.all()},
          object_id=employee_id)

urls.py

from contacts.views import employees

   urlpatterns = patterns('',
       url(r'^$',
           employees.employee_list,
           name='contacts_employee_list'),
       url(r'^(?P<employee_id>\d+)/$',
           employees.employee_detail,
          name='contacts_employee_detail'),

my employee_deatil.html выглядит как

 {% block title %} Employee details {% endblock %}
   {% block heading1%}<h1> Employee's Details </h1>{% endblock %}
   {% block right_menu %}
      {% if object %}
         <ul>
           <li> Name:{{ object.full_name }}</li>
           <li> Contact No.: {{ object.phone_number }}</li>
         <!--  <li> Refrence Contact No.: {{ EC_list.contact }}</li> -->
          <li> Blood Group: {{ object.blood_type }}</li>
          <li> Martial Status: {{ object.martial_status }}</li>
          <li> Nationality: {{ object.about }}</li>
          <!-- <li> Relationship: {{ EC_list.relationship }}</li>
           <li>Course: {{ object.course }}</li>  -->
        </ul>
        {% else %}
            No Registered user present.
        {% endif %}
    {% endblock %}

Поэтому, пожалуйста, помогите мне выяснить, как я могу отобразить все данные сотрудника, которые присутствуют в других моделях,Спасибо!

1 Ответ

0 голосов
/ 26 ноября 2010

Если я вас правильно понимаю, вы хотите отобразить информацию о сотруднике, которая хранится в других моделях.

Я предполагаю, что вы знаете, что вы можете предварительно отфильтровать представление и отправить дополнительную контекстную переменную с помощьюнабор запросов.используя существующую строку extra_context ="EC_list": EmergencyContact.objects.all() выбирает слишком много.Я предполагаю, что ваша модель EmergencyContact имеет внешний ключ для Employee (employee = ForeignKey(Employee, related_name='emergency_contacts')).В этом случае вы должны передать свой дополнительный контекст, отфильтрованный.

def employee_detail(request, employee_id):
    return object_detail(
        request,
        queryset= Employee.objects.all(),
        extra_context ={"EC_list": EmergencyContact.objects.filter(employee__pk=employee_id)},
        object_id=employee_id)

это отфильтрует список только к нужным вам экстренным контактам.

{% block title %} Employee details {% endblock %}
{% block heading1%}<h1> Employee's Details </h1>{% endblock %}
{% block right_menu %}
   {% if object %}
      <ul>
        <li> Name:{{ object.full_name }}</li>
        <li> Contact No.: {{ object.phone_number }}</li>
        <li> Blood Group: {{ object.blood_type }}</li>
        <li> Martial Status: {{ object.martial_status }}</li>
        <li> Nationality: {{ object.about }}</li>
        <li> Course: {{ object.course }}</li>
        <li> Emergency Contacts: 
          <ul> 
            {% for EC in EC_list %} 
            <li> Name: {{ EC.name }} </li>
            <li> Contact No.: {{ EC.contact }}</li>
            <li> Relationship: {{ EC.relationship }}</li>
            {% endfor %}
          </ul>
        </li>
     </ul>
     {% else %}
         No Registered user present.
     {% endif %}
 {% endblock %}

Конечно, это только один способсделать это.если вам не нужны какие-либо необычные фильтры для экстренных контактов, вы можете использовать обратный поиск внешнего ключа в шаблоне.т.е. избавиться от extra_context для EC_list и заменить функцию рендеринга контактов следующим образом:

        <li> Emergency Contacts: 
          <ul> 
            {% for EC in object.emergency_contacts %} 
            <li> Name: {{ EC.name }} </li>
            <li> Contact No.: {{ EC.contact }}</li>
            <li> Relationship: {{ EC.relationship }}</li>
            {% endfor %}
          </ul>
        </li>

Помните, что у нас есть employee = ForeignKey(Employee, related_name='emergency_contacts') в качестве внешнего ключа от EmergencyContact для Employee.это объявление не только добавляет поле сотрудника в EmergencyContact, но и добавляет дополнительное поле виртуальное для сотрудника с именем «emergency_contacts».это виртуальное поле возвращает набор запросов всех Экстренных контактов, связанных с текущим сотрудником.

Дайте мне знать, если у вас есть какие-либо вопросы или вам нужны ссылки на документацию

РЕДАКТИРОВАТЬ: для удобства чтения отправитель устанавливаетПараметр template_object_name универсального представления.

def employee_detail(request, employee_id):
    return object_detail(request, queryset= Employee.objects.all(),
                  object_id=employee_id, template_object_name='employee')

------------------------------------------------------------------------------------------

        <li> Name: {{ employee.full_name }}</li>
        <li> Emergency Contacts: 
          <ul> 
            {% for EC in employee.emergency_contacts %} 
            <li> Name: {{ EC.name }} </li>
            <li> Contact No.: {{ EC.contact }}</li>
            <li> Relationship: {{ EC.relationship }}</li>
            {% endfor %}
          </ul>
        </li>
...