我用django1.9和python-3.4.4开始了这个项目。 我已经建立了一个应用程序来跟踪我的能源,水和天然气的消耗。我开始这个项目是为了更好地了解django和python。
我创建了一个表单,其中有两个字段。一个用于计数器类型,一个用于值。 现在我想从数据库中获取最新值并进行简单的计算。
Component
models.py
delta = value_db - value_form
forms.py
class Verbraucher(models.Model):
Id = models.AutoField(primary_key=True)
Typ = models.CharField(max_length=50)
Nummer = models.CharField(max_length=50, unique=True)
def __str__(self):
return format(self.Typ)
class Daten(models.Model):
Daten_id = models.AutoField(primary_key=True)
Verbraucher = models.ForeignKey(Verbraucher)
Stand = models.DecimalField(max_digits=10, decimal_places=3)
Verbrauch = models.DecimalField(max_digits=10, decimal_places=3)
Zeitstempel = models.DateTimeField(auto_now=True, auto_now_add=False)
Updatestempel = models.DateTimeField(auto_now=False, auto_now_add=True)
def __str__(self):
return format(self.Zeitstempel)
views.py
class DatenForm(forms.ModelForm):
class Meta:
model = Daten
fields = ['Verbraucher', 'Stand']
我尝试了各种各样的方法,但似乎都没有。 我希望有人有一个想法来帮助我! 非常感谢!
修改
它背后的整个想法是有一个本地网站,你有两个小领域的小形式。一个用于计数器类型,一个用于今天的价值。 之后我想从这个计数器的数据库中获取最新值并减去bot。然后应将计算值插入db。 我希望有帮助吗?!
EDIT2:
我玩了一点点,发现了一个错误。
如果我想进行计算,我明白了。
def dateneingabe(request):
if request.method == "GET":
form = DatenForm()
return render(request, 'verbrauch/eingabe.html', {'form': form})
elif request.method == "POST":
form = DatenForm(request.POST)
model = Daten()
if form.is_valid():
instance = form.save(commit=False)
Stand_db = Daten.objects.lastest(Verbraucher)
instance.Verbrauch = do_calc(Stand - Stand_db)
instance.save()
return HttpResponseRedirect('/')
奇怪的是我在模型文件中将两者都定义为小数...
这是代码(在form = DatenForm(request.POST)之后的views.py):
unsupported operand type(s) for -: 'decimal.Decimal' and 'Daten'
答案 0 :(得分:0)
首先,安排你的观点并不好,虽然它会起作用。经过验证的表单数据将位于form.cleaned_data
字典中。这些数据将很好地转换为Python类型。 IntegerField,DecimalField和FloatField等字段分别将值转换为Python int,Decimal和float。
from yourapp.model import Daten
def dateneingabe(request):
if request.method == "POST":
form = DatenForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
Stand_db = Daten.objects.lastest(Verbraucher)
#you used Stand instead of instance.stand and since instance.stand is decimalfield is will be processed nicely
instance.Verbrauch = do_calc(instance.Stand - float(Stand_db))
instance.save()
return HttpResponseRedirect('/')
else:
form = DatenForm()
return render(request, 'verbrauch/eingabe.html', {'form': form})
我希望它有所帮助
答案 1 :(得分:0)
非常感谢您的支持和想法! 我设法解决了我的问题:
private SessionFactory buildSessionFactory() {
try {
System.out.println(hostname);
System.out.println(username);
System.out.println(password);
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration()
.addAnnotatedClass(DBUser.class)
.addAnnotatedClass(DBTrustee.class)
.addAnnotatedClass(DBTrusteeUser.class)
.setProperty("hibernate.show_sql", "true")
.setProperty("hibernate.connection.driver_class", "oracle.jdbc.driver.OracleDriver")
.setProperty("connection.url", "jdbc:oracle:thin:@"+hostname)
.setProperty("connection.username", username)
.setProperty("connection.password", password)
.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect")
.setProperty("hibernate.default_schema", "apps")
.buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
Stand_db给出字典中所选计数器的最后十进制值。 要获得实际值,我必须从名称中分离密钥。 Stand_db2正在这样做。
最后我进行计算并保存记录。