Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一个项目中的Django文件之间共享数据?_Django_Django Models - Fatal编程技术网

如何在一个项目中的Django文件之间共享数据?

如何在一个项目中的Django文件之间共享数据?,django,django-models,Django,Django Models,我是一个Django新手,所以我试图通过在Pythonywhere上慢慢建立自己的费用和收入网站来学习 我知道我的项目没有适当的规格,但它工作得非常好。。。除了一件事:主页可以从我的费用表中提取数据,但不能从我的收入表中提取数据。没有错误,它只返回零条记录。 我确信这个问题与我将收入相关的项目放在一个单独的income.py文件中有关。我不想将收入资料合并到更大的views.py文件中 关于如何从views.py中的HomePageView访问收入表数据,您能给我一些建议吗? 谢谢,杰森 Dja

我是一个Django新手,所以我试图通过在Pythonywhere上慢慢建立自己的费用和收入网站来学习

我知道我的项目没有适当的规格,但它工作得非常好。。。除了一件事:主页可以从我的费用表中提取数据,但不能从我的收入表中提取数据。没有错误,它只返回零条记录。

我确信这个问题与我将收入相关的项目放在一个单独的income.py文件中有关。我不想将收入资料合并到更大的views.py文件中

关于如何从views.py中的HomePageView访问收入表数据,您能给我一些建议吗?

谢谢,杰森

Django场地结构: views.py: URL.py:
如果查询没有返回任何记录,则表明数据库中没有与条件匹配的记录。尝试使用manage.py shell对查询进行实验,看看为什么它的行为可能与您期望的不一样。@Glenn:您是对的!views.py中的end_range变量设置为last_year而不是current_year,这排除了我需要的记录。谢谢你的帮助!如果你把这个作为一个答案,那么我很乐意选择它。
Django01
   ---Django01
         __init__.py
         asgi.py
         income.py          # created later, contains income_list(request)
         models.py          # contains definitions for both an Expenses table and an Income table
         settings.py
         urls.py            # holds all urls for site
         views.py           # contains HomePageView(TemplateView) and expense_list(request)
         wsgi.py
   ---static
   ---templates
         ---Django01
               base.html
               expenses_list.html
               home.html       # Page where I'd like to access BOTH Expense and Income table
               incomes_list.html
# ===============================================================================
# views.py
# ===============================================================================
from django.views.generic import TemplateView
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect
from .models import Expenses, Income
from datetime import date, datetime
from django.db.models import Count, Sum


# ------------------------------------------------------------------------------
# Home Page
# ------------------------------------------------------------------------------
class HomePageView(TemplateView):
    template_name = 'home.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['base_template'] = "base.html"

        # Create Date Range (Today - 2 Years)
        todays_date       = date.today()
        current_year      = todays_date.year
        last_year         = int(current_year) - 1
        start_range       = str(last_year) + "-01-01"
        end_range         = str(last_year) + "-12-31"

        # Create Frequent Expense Sellers List <--- WORKS GREAT!
        sellers_recordset = Expenses.objects.filter(xdate__range=[start_range, end_range]).values('xseller','xcategory').exclude(xseller__exact='').annotate(count=Count('xseller')).order_by('-count', 'xseller')[:10:1]
        context['sellers_list'] = sellers_recordset

        # Create Frequent Income Sources List <--- NOT WORKING. RETURNS EMPTY, NO ERROR, WHY???
        payers_recordset = Income.objects.filter(idate__range=[start_range, end_range]).values('ipayer','isource').exclude(ipayer__exact='').annotate(count=Count('ipayer')).order_by('-count', 'ipayer')[:10:1]
        context['payers_list'] = payers_recordset

        return context


# ------------------------------------------------------------------------------
# Expense List Page  <--- WORKS GREAT!
# ------------------------------------------------------------------------------
@login_required
def expense_list(request):

    # Are there Parameters in HTTP Query String?
    param_year     = request.GET.get('year','')
    param_seller   = request.GET.get('seller','')
    param_category = request.GET.get('category','')
    param_vacation = request.GET.get('vacation','')

    # Set Default Years
    todays_date = date.today()
    current_year  = todays_date.year
    next_year     = current_year + 1
    previous_year = current_year - 1

    # Filter Expenses based on Parameters
    if param_year != "":
        current_year      = int(param_year)
        next_year         = current_year + 1
        previous_year     = current_year - 1
        start_range       = str(current_year) + "-01-01"
        end_range         = str(current_year) + "-12-31"
        expense_recordset = Expenses.objects.filter(xdate__range=[start_range, end_range]).order_by('-xdate')
        show_year         = True
    elif param_seller != "":
        expense_recordset = Expenses.objects.filter(xseller=param_seller).order_by('-xdate')
        show_year = False
    elif param_category != "":
        expense_recordset = Expenses.objects.filter(xcategory=param_category).order_by('-xdate')
        show_year = False
    elif param_vacation != "":
        expense_recordset = Expenses.objects.filter(xvacation=param_vacation).order_by('-xdate')
        show_year = False
    else:
        expense_recordset = Expenses.objects.filter(xdate__gte="2021-01-01").order_by('-xdate')
        show_year = True

    # Get Count & Totals
    expense_count = expense_recordset.all().count()
    expense_total = expense_recordset.all().aggregate(Sum('xamount')).get('xamount__sum', 0.00)

    # Create Context to Send to Template
    context = {
        'base_template' : "base.html",
        'show_year'     : show_year,
        'next_year'     : next_year,
        'current_year'  : current_year,
        'previous_year' : previous_year,
        'expense_count' : expense_count,
        'expense_list'  : expense_recordset,
        'expense_total' : expense_total
    }

    return render(request, 'expense_list.html', context=context)

# ===============================================================================
# income.py
# ===============================================================================
from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from .models import Income
from datetime import datetime, date
from django.db.models import Count, Sum

# ------------------------------------------------------------------------------
# Incomes List Page  <--- WORKS GREAT!
# ------------------------------------------------------------------------------
@login_required
def income_list(request):

    # Are there Parameters in HTTP Query String?
    param_year   = request.GET.get('year','')
    param_payer  = request.GET.get('payer','')
    param_source = request.GET.get('source','')

    # Set Default Years
    todays_date   = date.today()
    current_year  = todays_date.year
    next_year     = current_year + 1
    previous_year = current_year - 1

    # Filter Income based on Parameters
    if param_year != "":
        current_year      = int(param_year)
        next_year         = current_year + 1
        previous_year     = current_year - 1
        start_range       = str(current_year) + "-01-01"
        end_range         = str(current_year) + "-12-31"
        income_recordset  = Income.objects.filter(idate__range=[start_range, end_range]).order_by('-idate')
        show_year         = True
    elif param_payer != "":
        income_recordset  = Income.objects.filter(ipayer=param_payer).order_by('-idate')
        show_year         = False
    elif param_source != "":
        income_recordset  = Income.objects.filter(isource=param_source).order_by('-idate')
        show_year         = False
    else:
        income_recordset  = Income.objects.filter(idate__gte='2021-01-01').order_by('-idate')
        show_year         = True

    # Get Count & Totals
    income_count = income_recordset.all().count()
    income_total = income_recordset.all().aggregate(Sum('iamount')).get('iamount__sum', 0.00)

    # Create Context to Send to Template
    context = {
        'base_template' : "base.html",
        'show_year'     : show_year,
        'next_year'     : next_year,
        'current_year'  : current_year,
        'previous_year' : previous_year,
        'income_count'  : income_count,
        'income_list'   : income_recordset,
        'income_total'  : income_total
    }

    return render(request, 'income_list.html', context=context)
# ===============================================================================
# models.py
# ===============================================================================
from django.db import models
from django.urls import reverse


# -------------------------------------------------------------------------------
# Expenses Table
# -------------------------------------------------------------------------------
class Expenses(models.Model):

    # Fields
    xid = models.AutoField(db_column='xID', primary_key=True)  # Field name made lowercase.
    xdate = models.DateTimeField(db_column='xDate', blank=True, null=True)  # Field name made lowercase.
    xseller = models.CharField(db_column='xSeller', max_length=50, blank=True, null=True)  # Field name made lowercase.
    xamount = models.DecimalField(db_column='xAmount', max_digits=10, decimal_places=3, blank=True, null=True)  # Field name made lowercase.
    xcategory = models.CharField(db_column='xCategory', max_length=50, blank=True, null=True)  # Field name made lowercase.
    xwith = models.CharField(db_column='xWith', max_length=50, blank=True, null=True)  # Field name made lowercase.
    xpresent = models.CharField(db_column='xPresent', max_length=50, blank=True, null=True)  # Field name made lowercase.
    xvacation = models.CharField(db_column='xVacation', max_length=50, blank=True, null=True)  # Field name made lowercase.
    xnotes = models.CharField(db_column='xNotes', max_length=300, blank=True, null=True)  # Field name made lowercase.

    # Metadata
    class Meta:
        managed = False
        db_table = 'Expenses'
        app_label  = 'Expenses'         # Added to Alleviate RunTime Error

    # Methods
    def get_absolute_url(self):
        """Returns the url to access a particular instance of MyModelName."""
        return reverse('model-detail-view', args=[str(self.id)])

    def __str__(self):
        """String for representing the MyModelName object (in Admin site etc.)."""
        return self.my_field_name


# -------------------------------------------------------------------------------
# Income Table
# -------------------------------------------------------------------------------
class Income(models.Model):

    # Fields
    iid = models.AutoField(db_column='iID', primary_key=True)  # Field name made lowercase.
    idate = models.DateTimeField(db_column='iDate', blank=True, null=True)  # Field name made lowercase.
    ipayer = models.CharField(db_column='iPayer', max_length=50, blank=True, null=True)  # Field name made lowercase.
    iamount = models.DecimalField(db_column='iAmount', max_digits=10, decimal_places=3, blank=True, null=True)  # Field name made lowercase.
    isource = models.CharField(db_column='iSource', max_length=50, blank=True, null=True)  # Field name made lowercase.
    inotes = models.CharField(db_column='iNotes', max_length=300, blank=True, null=True)  # Field name made lowercase.

    # Metadata
    class Meta:
        managed = False
        db_table = 'Income'
        app_label  = 'Expenses'         # Added to Alleviate RunTime Error

    # Methods
    def get_absolute_url(self):
        """Returns the url to access a particular instance of MyModelName."""
        return reverse('model-detail-view', args=[str(self.id)])

    def __str__(self):
        """String for representing the MyModelName object (in Admin site etc.)."""
        return self.my_field_name
# ===============================================================================
# urls.py
# ===============================================================================
from django.contrib import admin
from django.urls import path, include

from .views import HomePageView, expense_list
from .income import income_list

urlpatterns = [
    path('',                 HomePageView.as_view(),    name='home'),
    path('expense_list/',    expense_list,              name='expense_list'),
    path('income_list/',     income_list,               name='income_list'),
    path('accounts/',        include('django.contrib.auth.urls')),
    path('admin/',           admin.site.urls),
]