Статическая переменная и метод в файле моделей Django и как добавить десятичное поле для статической переменной в интерфейсе администратора Django - PullRequest
0 голосов
/ 31 марта 2019

Я создаю веб-страницу, используя Django, который считает монеты.У каждой монеты есть свой coin_type и coin_count.Я также хочу иметь статическую итоговую переменную total, которая вычисляет общее количество монет.Я хочу создать функцию, которая сможет вычислять сумму coin_count всех экземпляров и присваивать это значение итоговому значению.Однако, когда я объявляю «total» внутри класса, его значение отличается для каждого экземпляра.Более того, я не знаю, как иметь десятичное поле для статической переменной в интерфейсе администратора Django.

В приведенном ниже коде я создаю глобальную переменную "total", чтобы ее значение не изменялось дляэкземпляры каждого класса.Однако каждый раз, когда я меняю код или перезагружаю сервер, его значение сбрасывается на 0.

Это мой файл models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
total = 0

class Coin(models.Model):
    coin_type = models.CharField(max_length=100)
    coin_count = models.DecimalField(max_digits=3,decimal_places=0)

    def __str__(self):
        return self.coin_type

    def count(self):
        return self.coin_count

    def increase(self):
        self.coin_count += 1

    @staticmethod
    def find_total():
        global total
        return total

Я хочу иметь статическую переменную "total ", который имеет одинаковое значение для всех экземпляров, и статический метод" figure_total ", который вычисляет сумму" coin_count "всех экземпляров.Если это возможно, может кто-нибудь помочь мне создать десятичное поле для «всего» в интерфейсе администратора Django?

1 Ответ

0 голосов
/ 31 марта 2019

Очевидно, что сумма будет сброшена при перезапуске, если она просто хранится как переменная в памяти; что еще вы ожидаете?

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

Но в этом нет никакого смысла. Монеты хранятся в базе данных, поэтому, чтобы получить сумму, вы должны попросить базу данных выполнить запрос суммы:

from django.db.models import Sum
Coin.objects.aggregate(total=Sum('coin_count'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...