我在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
,我可以编辑我的帖子,但我认为它不会来自此文件。
提前感谢任何能够帮助我的人。