Я новичок в Django и, потратив много времени на это (и все еще зависая), я подумал попросить помощи у специалиста!
В этом небольшом проекте я Попытка достичь - это веб-страница, которая возвращает общую сумму инвестиций пользователя в фунтах стерлингов (на данный момент только около 1033 * инвестиций). Я создал несколько python сценариев для получения курсов валют.
Я пытаюсь суммировать все суммы в фунтах стерлингов, однако я застрял! Я не знаю, следует ли мне делать это в модели (Ca sh) или в представлении и как затем показать это в шаблоне (cash_list. html).
Ваша помощь будет очень признателен.
Работа ниже
models.py
from django.db import models
class fx_table(models.Model):
eur_to_gbp_pair = 'EUR/GBP'
aud_to_gbp_pair = 'AUD/GBP'
usd_to_gbp_pair = 'AUD/USD'
eur_to_gbp = models.FloatField(default=0)
aud_to_gbp = models.FloatField(default=0)
usd_to_gbp = models.FloatField(default=0)
date_time = models.CharField(max_length=264,unique=True,default='')
class Cash(models.Model):
reference = models.CharField(max_length=128)
amount = models.FloatField(default=0)
currency = models.CharField(max_length=128)
forms.py
from django import forms
from fx_rates_app.models import Cash
from fx_rates_app.models import Shares
class NewUserFormCash(forms.ModelForm):
class Meta():
model = Cash
fields = '__all__' #You want to be able to change all the fields
class NewUserFormShares(forms.ModelForm):
class Meta():
model = Shares
fields = '__all__'
Python скрипт
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','fx_rates_project.settings')
import django
django.setup()
from fx_rates_app.models import fx_table
import pandas_datareader.data as web
from datetime import datetime
os.environ["ALPHAVANTAGE_API_KEY"] = 'XXXXXXXXXX'
fx_gbp_to_eur = web.DataReader("GBP/EUR","av-forex")
eur = float(fx_gbp_to_eur[4:5].values[0][0])
fx_gbp_to_aud = web.DataReader("GBP/AUD","av-forex")
aud = float(fx_gbp_to_aud[4:5].values[0][0])
fx_gbp_to_usd = web.DataReader("GBP/USD","av-forex")
usd = float(fx_gbp_to_usd[4:5].values[0][0])
from datetime import datetime
now = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
webpg1 = fx_table.objects.get_or_create(eur_to_gbp=eur,aud_to_gbp=aud,usd_to_gbp=usd,date_time=dt_string)[0]
views.py
from django.shortcuts import render
from fx_rates_app.models import fx_table
from fx_rates_app.forms import NewUserFormCash,NewUserFormShares
from django.views.generic import TemplateView,ListView
from django.urls import reverse
from fx_rates_app import forms
from fx_rates_app.models import Cash, Shares,fx_table
import datetime
class CashListView(ListView):
model = Cash
context_object_name = 'cash_details'
def get_context_data(self, **kwargs):
context = super(CashListView, self).get_context_data(**kwargs)
context.update({
'fx_list': fx_table.objects.all(),
'insert': datetime.datetime.now(),
})
return context
class SharesListView(ListView):
model = Shares
context_object_name = 'shares_details'
def get_context_data(self, **kwargs):
context = super(SharesListView, self).get_context_data(**kwargs)
context.update({
'fx_list': fx_table.objects.all(),
})
return context
def Cash(request):
form_cash = NewUserFormCash()
if request.method == "POST":
form_cash = NewUserFormCash(request.POST)
if form_cash.is_valid():
form_cash.save(commit=True)
return index(request)
else:
print('ERROR FORM INVALID')
return render(request,'fx_rates_app/cash_positions.html',{'form':form_cash})
urls.py
from django.urls import path
from fx_rates_app import views
from fx_rates_app.views import CashListView,SharesListView,FxListView
app_name = 'fx_rates_app'
urlpatterns = [
path('fx/',FxListView.as_view(), name='fx'),
path('cash_positions/',views.Cash,name='cash_positions'),
path('shares/',views.Shares,name='shares'),
path('cash_list/',CashListView.as_view(), name='cash_list'),
path('shares_list/',SharesListView.as_view(), name='shares_list'),
]
cash_list. html
{% extends 'fx_rates_app/base.html' %}
{% block body_block %}
{% load mathfilters %}
<div class="container">
<table class="table table-bordered">
<thead>
<th>Reference</th>
<th>Amount</th>
<th>Currency</th>
<th>Equivalent in GBP</th>
</thead>
{% for item in cash_details %}
{% for ele in fx_list %}
<tr>
<td> {{ item.reference }} </td>
<td> {{ item.amount|floatformat:0|intcomma }} </td>
<td> {{ item.currency }} </td>
{% if item.currency == "AUD" %}
<td>{{ item.amount|div:ele.aud_to_gbp|floatformat:0|intcomma }}</td>
{% elif item.currency == "EUR" %}
<td>{{ item.amount|div:ele.eur_to_gbp|floatformat:0|intcomma }}</td>
{% elif item.currency == "USD" %}
<td>{{ item.amount|div:ele.usd_to_gbp|floatformat:0|intcomma }}</td>
{% else %}
<td> {{ item.amount|floatformat:0|intcomma }} </td>
{% endif %}
</tr>
{% endfor %}
{% endfor %}
<tr>
<td> Total </td>
<td> </td>
<td> </td>
<td> Total in GBP here</td>
</tr>
{% endblock %}
</div>
Спасибо в заранее, Алекс