Объект 'int' не имеет атрибута 'save' в django

У меня есть значение в базе данных на phpmyadmin и я хочу изменить это значение на новое вычисленное значение. Функция save() не работает, и ошибка говорит мне, что это потому, что это interger. Я не знаю, как решить эту проблему.

def DeleteBulle (request, id_bulle):

        #suppression de la bulle par l'id
        id_bulle
        param = Bulles.objects.get(pk=id_bulle)
        #param.delete()

        #adaptation du champ "nombre de bulle" dans la table "site"
        site=param.id_site
        print('site', site)
        compte=Bulles.objects.filter(id_site=site).count()
        print('nombre bulle avec site identique', compte)
        nbrbulle=Bulles.objects.get(pk=id_bulle).id_site.nombre_bulles
        nbrbulle=compte
        nbrbulle.save()
        
        #réussite
        print("Bulle supprimée")

        return redirect('api_bulles_frontend')

Модели :

class Site(models.Model):
id_site = models.AutoField(
    db_column="Id_site", primary_key=True
)  # Field name made lowercase.
nom = models.CharField(
    db_column="Nom", max_length=100
)  # Field name made lowercase.
vitesse_b = models.FloatField(db_column="Vitesse_b")  # Field name made lowercase.
vitesse_c = models.FloatField(db_column="Vitesse_c")  # Field name made lowercase.
ecart_type_b = models.FloatField(
    db_column="Ecart_type_b"
)  # Field name made lowercase.
ecart_type_c = models.FloatField(
    db_column="Ecart_type_c"
)  # Field name made lowercase.
type_site = models.CharField(
    db_column="Type_site", max_length=20
)  # Field name made lowercase.
longitude = models.FloatField(db_column="Longitude")  # Field name made lowercase.
latitude = models.FloatField(db_column="Latitude")  # Field name made lowercase.
nombre_bulles = models.IntegerField(db_column="Nombre_bulles")
date_vidange = models.DateField(
    db_column="Date_vidange"
)  # Field name made lowercase.
#trajet = models.ManyToManyField(Trajet, related_name='site_moi')

class Meta:
    db_table = "site"


class Bulles(models.Model):
id_bulle = models.AutoField(primary_key=True)
num_bulle = models.CharField(max_length=20)
type_bulle = models.CharField(max_length=20)
colories = models.CharField(max_length=20)
latitude = models.FloatField()
longitude = models.FloatField()
date_vidange = models.DateField(
    db_column="date_vidange"
) 
id_depot = models.ForeignKey(
    "Depot", on_delete=models.CASCADE, db_column="id_depot"
)
id_site = models.ForeignKey(
    "Site",related_name='bul', on_delete=models.CASCADE, db_column="Id_site"
)  
class Meta:
    db_table = "bulles"

Я не знаю, как решить эту проблему. Спасибо за помощь.

Вы должны сохранить объект site с обновленным элементом, а не обновлять nombre_bulles, который является просто целым числом:

from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_http_methods


@require_http_methods(['POST', 'DELETE'])
def DeleteBulle(request, id_bulle):
    bulle = get_object_or_404(Bulles, pk=id_bulle)
    site = param.id_site
    bulle.delete()
    site.nombre_bulles = site.bul.count()
    site.save(update_fields=['nombre_bulles'])
    return redirect('api_bulles_frontend')

Примечание: обычно модели Django дается сингулярное имя, поэтому Bulles вместо Bulle.


Примечание: Обычно не добавляют префикс id_… к полю ForeignKey, так как Django автоматически добавит поле-"близнец" с суффиксом …_id. Поэтому он должен быть site, вместо id_site.

.

Note: It is often better to use get_object_or_404(…) [Django-doc], then to use .get(…) [Django-doc] directly. In case the object does not exists, for example because the user altered the URL themselves, the get_object_or_404(…) will result in returning a HTTP 404 Not Found response, whereas using .get(…) will result in a HTTP 500 Server Error.


Note: One can use the @require_POST decorator [Django-doc] to restrict the view to only be accessible for a POST request.

Вернуться на верх