Django按月和年过滤对象的问题

时间:2020-08-14 11:00:57

标签: python html django forms api

我正在Django中建立一个网站,我想创建一个页面作为我的models.py文件中包含的Spendings对象的档案,我正在尝试制作一个用户可以选择年份的表格然后单击一个月,然后单击“提交”,我想向他们显示他们在该月的所有支出。这是我来自views.py文件的代码

def archive(request):
    if request.method == 'POST':
        budget = Budget.objects.filter(user=request.user)
        year = datetime.strptime(request.POST['year'], '%Y')
        month = datetime.strptime(request.POST['month'], '%m')
        spendings = Spending.objects.filter(
            user=request.user, date_created__year=year.year, date_created__month=month.month)
        total_spendings = spendings_assembly(spendings)
        return redirect('archive')
    else:
        budget = Budget.objects.filter(user=request.user)
        spendings = Spending.objects.filter(user=request.user)
        total_spendings = spendings_assembly(spendings)
    context = {
        'title': 'Archive',
        'spendings': spendings,
        'total_spendings': total_spendings,
        'budget': budget,
    }
    return render(request, 'users/archive.html', context)

这就是我的archive.html文件中的内容:

    <div class="container">
        <form method="POST" action="{% url 'archive' %}">
            {% csrf_token %}
            <div class="input-group mb-3">
              <div class="input-group-prepend">
                <label class="input-group-text" for="inputGroupSelect01">Year</label>
              </div>
              <select name="year" class="custom-select" id="inputGroupSelect01">
                <option value="2017">2017</option>
                <option value="2018">2018</option>
                <option value="2019">2019</option>
                <option value="2020">2020</option>
              </select>
            </div>
            <div class="input-group mb-3">
              <select name="month" class="custom-select" id="inputGroupSelect02">
                <option value="01">January</option>
                <option value="02">February</option>
                <option value="03">March</option>
                <option value="04">April</option>
                <option value="05">May</option>
                <option value="06">June</option>
                <option value="07">July</option>
                <option value="08">August</option>
                <option value="09">September</option>
                <option value="10">October</option>
                <option value="11">November</option>
                <option value="12">December</option>
              </select>
              <div class="input-group-append">
                <label class="input-group-text" for="inputGroupSelect02">Month</label>
              </div>
            </div>
            <input type="submit" name="result" value="See the Archive" class="btn btn-warning btn-lg btn-block">
        </form>
        <div class="row">
            <div class="col">
                <h4>Spendings List</h4>
                <hr>
                <table class="table table-hover">
                    <thead class="thead-dark">
                        <tr>
                            {% for sum in budget %}
                            <th>Name</th>
                            <th>Category</th>
                            <th>Amount ({{ sum.currency }})</th>
                            <th>Date Created</th>
                            {% endfor %}
                        </tr>
                    </thead>
                    {% for spending in spendings %}
                        <tr>
                            <td>{{ spending.name }}</td>
                            <td>{{ spending.category }}</td>
                            <td>{{ spending.amount }}</td>
                            <td>{{ spending.date_created|date:"F-d-Y" }}</td>
                        </tr>
                    {% endfor %}
                </table>
            </div>
        </div>
    </div>

这是来自models.py文件的支出对象的代码:

class Spending(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    category = models.CharField(max_length=100)
    amount = models.FloatField()
    date_created = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.name

0 个答案:

没有答案