Невозможно извлечь данные из модели (базы данных) - PullRequest
0 голосов
/ 10 мая 2019

Я создаю веб-приложение для соответствия требованиям законодательства, которое включает отношения между записями и т. Д. У меня есть отдельные модели, такие как Company_Masters, Location_Masters, dept, employee и Comp_Info.На моей странице указателя я хотел бы перечислить все соответствия и хотел бы создавать, обновлять и редактировать их.Но я не знаю, как использовать все модели

#view.py
from django.shortcuts import render
from django.views.generic import ListView
from .models import Company_Masters, Location_Masters,dept, emplo, Comp_Info 

def home(request):
    mylist = zip(Company_Masters.objects.all(), Location_Masters.objects.all() , dept.objects.all(), emplo.objects.all())
    context = {
        'mylist': mylist
    }
    return render(request,'compliance/home.html',context)

class PostListView(ListView):
    model = Company_Masters
    model = Location_Masters
    model = dept 
    model = emplo
    model = Comp_Info
    template_name = 'compliance/home.html'
    context_object_name = 'mylist'

def about(request):
    return render(request,'compliance/about.html')  


URLS.PY

#urls.py
from django.urls import path
from .views import PostListView
from . import views

urlpatterns = [
    path('', PostListView.as_view(), name='compliance-home'),
    path('about/', views.about, name='compliance-about')

]

HOME.HTML

{% extends "compliance/base.html" %}
{% block content %}
{% for comp,loc,dept,emp in mylist %}


      <article class="media content-section">
          <div class="media-body">
            <div class="article-metadata">
              <a class="mr-2" href="#">COMPLIANCE 1</a>
              <small class="text-muted">DATE EXPIRY</small>
            </div>


            <p class="article-content"> COMPANY ID: {{ comp.comp_id }}</p>
            <p class="article-content">COMPANY NAME: {{ comp.comp_name }}</p>

            <p class="article-content">LOCATION ID: {{ loc.loc_id}}</p>
            <p class="article-content">LOCATION NAME: {{ loc.loc_name}}</p>

            <p class="article-content">DEPT ID: {{ dept.dept_id}}</p>
            <p class="article-content">DEPT NAME: {{ dept.dept_name}}</p>

            <p class="article-content">EMPLOYEE ID: {{ emp.emp_id}}</p>
            <p class="article-content">EMPLOYEE NAME: {{ emp.emp_name}}</p>

            <!-- <p class="article-content">EMPLOYEE EMAIL: {{ emp.emp_email}}</p> -->

            </div>

      </article>

{% endfor %}      
{% endblock content %}`enter code here`

Поэтому в принципе я не могу извлечь данные из этих моделей (база данных)

1 Ответ

0 голосов
/ 19 мая 2019

Как правило, не используйте zip и определите каждый в своем контексте:

def home(request):
    context = {
        'mylist': {
            'comp': Company_Masters.objects.all(),
            'loc': Location_Masters.objects.all(),
            'dept': dept.objects.all(),
            'emp': emplo.objects.all()
        }
    }
    return render(request,'compliance/home.html',context)

вернет словарь mylist в ваш шаблон, из которого вы можете получить доступ ко всем остальным словарям, используя точечную запись mylist.comp в качестве примера. это не идеальное решение, но если мы не знаем, чего вы пытаетесь достичь, мы можем попытаться вас туда доставить.

В вашем шаблоне вы должны изменить на:

{% extends "compliance/base.html" %}
{% block content %}

      <article class="media content-section">
          <div class="media-body">
            <div class="article-metadata">
              <a class="mr-2" href="#">COMPLIANCE 1</a>
              <small class="text-muted">DATE EXPIRY</small>
            </div>

            {% for comp in mylist.comp %}
            <p class="article-content"> COMPANY ID: {{ comp.comp_id }}</p>
            <p class="article-content">COMPANY NAME: {{ comp.comp_name }}</p>
            {% endfor %}

            {% for loc in mylist.loc %}
            <p class="article-content">LOCATION ID: {{ loc.loc_id}}</p>
            <p class="article-content">LOCATION NAME: {{ loc.loc_name}}</p>
            {% endfor %}

            {% for dept in mylist.dept %}
            <p class="article-content">DEPT ID: {{ dept.dept_id}}</p>
            <p class="article-content">DEPT NAME: {{ dept.dept_name}}</p>
            {% endfor %}

            {% for emp in mylist.emp %}
            <p class="article-content">EMPLOYEE ID: {{ emp.emp_id}}</p>
            <p class="article-content">EMPLOYEE NAME: {{ emp.emp_name}}</p>
            <!-- <p class="article-content">EMPLOYEE EMAIL: {{ emp.emp_email}}</p> -->
            {% endfor %}

            </div>

      </article>

{% endblock content %}

Но я бы рискнул предположить и сказать, что это вряд ли даст вам желаемый конечный результат - хотя вы явно не сказали этого, я полагаю, ваша цель была в действительности объединить эти таблицы в единственный результат. Это более широкий ответ и потребует знания ваших моделей

То есть, если ваша цель - получить доступ ко всем emplo записям, вы должны использовать ForeignKey - dept, Location_Masters и Company_Masters, чтобы получить правильно связанные записи. что-то вроде emplo.objects.select_related('dept', 'Location_Masters', 'Company_Masters').all(), но это будет означать, что все иностранные ключи в emplo (опять-таки гадание на ваших моделях)

Примечание: вам следует подумать о чтении правильных имен в python / django - все классы вашей модели должны быть написаны заглавными буквами и не использовать подчеркивания в именах; также рекомендуется явно указывать имена классов и переменных, чтобы что следующий человек, который читает ваш код, поймет, чего вы пытались достичь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...