Django - 如何在视图中保存模型中的对象

时间:2016-10-26 19:19:40

标签: python html django

我在Python 3.7上运行Django 1.10。

当我在模型上应用函数后尝试从模型中保存对象时出现问题。

我想做的只是减去一定数量的钱(这个数量存储在班级(klient)属性argent)中。 然后,我在这个类中使用参数acheter创建了一个名为id_achat的方法,以便能够减去不同数量的资金。

当我在shell中运行命令a.acheter(id_achat)(其中 a klient对象且id_achat整数)时,一切正常,减法在我运行a.argent时已完成。

但是,在interface_du_klient.html中,我添加了一些链接以将用户重定向到名为achat的视图。在此视图中,我使用acheter方法调用klient对象调用get_object_or_404方法,但不修改此argent对象的属性klient

在这里,您可以看到我的models.py

from django.db import models
from django.contrib import admin
import decimal

class klient(models.Model):
    id_klient=models.CharField(max_length=100, primary_key=True)
    nom=models.CharField(max_length=100)
    prenom=models.CharField(max_length=100)
    argent=models.DecimalField(decimal_places=2,max_digits=4)
    membre=models.IntegerField() # 0 pour non membre, 1 pour membre KFet
    date = models.DateTimeField(auto_now_add=True, auto_now=False, 
                                verbose_name="Date d'enregistrement")
    nombre_biere=models.IntegerField(default=0)
    nombre_pinte=models.IntegerField(default=0)
    nombre_cafe_ou_the=models.IntegerField(default=0)
    nombre_canette=models.IntegerField(default=0)
    def __str__(self):
        return "{0} {1}".format(self.nom,self.prenom)
    def acheter(self,id_achat):
        if self.membre==0:
            a=1
        else:
            a=0.8
        if id_achat==1:          # id_achat : {1:bière 33cl, 2:bière 25cl, 3:pinte, 4:café/thé, 5:canette}
            self.argent=self.argent-decimal.Decimal(3*a)
            self.nombre_biere+=1                            ## bière 33cl
            self.save()
        elif id_achat==2:
            self.argent=self.argent-decimal.Decimal(2.2*a)
            self.nombre_biere+=1                            ## bière 25cl
            self.save()
        elif id_achat==3:
            self.argent=self.argent-decimal.Decimal(2*a)
            self.nombre_pinte+=1                            ## pinte Blondi
            self.save()
        elif id_achat==4:
            self.argent=self.argent-decimal.Decimal(0.4*a)
            self.nombre_cafe_ou_the+=1                      ## café/thé
            self.save()
        elif id_achat==5:
            self.argent=self.argent-decimal.Decimal(0.8*a)
            self.nombre_canette+=1                          ## canette
            self.save()
        pass

class achetables(models.Model):
    nom=models.CharField(max_length=100)
    prix=models.DecimalField(decimal_places=1,max_digits=4)
    def __str__(self):
        return "{0}".format(self.prix)

这是我的views.py

#-*- coding: utf-8 -*-

from django.http import HttpResponse
from django.shortcuts import render
from kfet.models import klient,achetables
from django.shortcuts import get_object_or_404
from django.urls import reverse

from datetime import datetime


def date_actuelle(request):
    return render(request, 'kfet/date.html', {'date': datetime.now()})

def accueil(request):
    liste_tokards=klient.objects.all()
    return render(request, "kfet/accueil.html",{'liste_tokards': liste_tokards})

def interface_du_klient(request,id_ienkli):
    produits=achetables.objects.all()
    klient_selec=get_object_or_404(klient, id_klient=id_ienkli)
    liste_tokards=klient.objects.all()
    if id_ienkli==0:
        return render(request, "kfet/accueil.html", {'liste_tokards': liste_tokards})
    else:
        return render(request, "kfet/interface_du_klient.html", {'client': klient_selec}, {'liste_produits' : produits})

def achat(request,id_bouffon,id_ach):
    klient_selec=get_object_or_404(klient, id_klient=id_bouffon)
    klient_selec.acheter(id_ach)
    return interface_du_klient(request,id_bouffon)

这是我的interface_klient.html

<h1>Bienvenue sur le site de la KFet !</h1>


<h3>Compte de {{client.nom}} {{client.prenom}}. Il y a {{client.argent}} euros sur son compte.</h3>



<p><a href="{% url "accueil" %}">Retour accueil</a>

<p><a href="{% url "achat" id_bouffon=client.id_klient id_ach=1 %}">Acheter biere 33cl</a>

<p><a href="{% url "achat" id_bouffon=client.id_klient id_ach=2 %}">Acheter biere 25cl</a>

<p><a href="{% url "achat" id_bouffon=client.id_klient id_ach=3 %}">Acheter pinte Blondi</a>

如果您想查看我的urls.py,我可以编辑我的帖子,但我认为它不会来自此文件。

提前感谢任何能够帮助我的人。

0 个答案:

没有答案