无法从模型的(数据库)提取数据

时间:2019-05-10 10:57:02

标签: python django

我正在构建一个合法合规性Webapp,其中包括条目之间的关系等。我有单独的模型,分别是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 :(得分:0)

基本上,不要使用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记录,则可以使用ForeignKeydeptLocation_MastersCompany_Masters来正确获取相关记录。类似于emplo.objects.select_related('dept', 'Location_Masters', 'Company_Masters').all()的东西,但这意味着所有外键都在使用(再次猜测您的模型)

注意:您应该考虑阅读有关在python / django中进行正确命名的信息-您的模型类应全部大写,且名称中不要使用下划线-同样,最好明确命名类和变量名称,因此是一个好习惯以便下一个阅读您的代码的人会理解您要完成的工作