django Сбой ограничения NOT NULL: "..............." - PullRequest
0 голосов
/ 23 марта 2020

Я новичок в django, и я хочу задать вам следующий вопрос.

У меня есть две модели: ежемесячный доход, который отражает мой ежемесячный доход по одной статье, и общий ежемесячный доход, который представляет Сумма всех статей ежемесячного дохода.

Мой models.py выглядит следующим образом:

from django.db import models
from djmoney.models.fields import MoneyField

class Vendite(models.Model):

    ricavi_dalle_vendite = models.CharField(max_length=100, editable=True)
    ricavi_dalle_vendite_01 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_dalle_vendite_02 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)


class Totale_Vendite(models.Model):
    ricavi_tot_dalle_vendite = models.CharField(max_length=100, editable=True)
    ricavi_01 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)
    ricavi_02 = MoneyField(decimal_places=2,default=0, default_currency='EUR',max_digits=11)

Мои взгляды следующие:

def ricavi_dalle_vendite(request):
    items = Vendite.objects.all()
    if request.method == 'POST':
         form = VenditeModelForm(request.POST)
         if form.is_valid():
             print("Il form è valido")
             new_input = form.save()

    else :
        form = VenditeModelForm()

    data_jan = list(Vendite.objects.aggregate(Sum('ricavi_dalle_vendite_01')).values())[0]
    data_feb = list(Vendite.objects.aggregate(Sum('ricavi_dalle_vendite_02')).values())[0]
    jan = data_jan
    feb = data_feb
    total_income = Totale_Vendite(ricavi_01=jan, ricavi_02=feb, id=1)
    total_income = Totale_Vendite(ricavi_01=jan, ricavi_02=feb, id=1)
    total_income.save()

    context= {
        "form": form,
        'items': items,
            }
    return render(request, "app/vendite.html", context)

Код работает хорошо, но когда я собираюсь удалить первые элементы, вставленные в модели "Vendite" django, выдает ошибку "Сбой NOT NULL": app_totale_vendite.ricavi_01.

Я думаю, что ошибка связана с моими ограничениями "id = 1" в моих представлениях, но мне нужно иметь в модели Totale_vendite только строку, которая обновляется, если я добавляю или удаляю элемент ежемесячного дохода.

Как можно решить эту проблему ??

1 Ответ

0 голосов
/ 23 марта 2020

Проблема в том, что aggregate вернул None для поля ricavi_01 (другими словами data_jan == None), и ваша схема не позволяет этому полю равняться Null. Просто измените ваш код, чтобы использовать значение по умолчанию, если агрегат ничего не возвращает:

jan = data_jan if data_jan else 0
feb = data_feb if data_feb else 0
...