Как обновить таблицу модели с помощью диктитона в Django - PullRequest
0 голосов
/ 13 мая 2019

Я не могу обновить таблицу результатов в Django, используя словарь, возможно, мне нужно включить имя пользователя в качестве ключа, но я не знаю, как это сделать?

в func.py

from django.contrib.auth import authenticate
from django.contrib import messages
from django.views.decorators.csrf import csrf_protect
from .forms import SignUp
from .models import Table, Results
from django.contrib.auth.models import User
from .serializers import TableSerializer, SessionAvgSerializer, ResultsSerializer

curArr=[GBP,EUR]

def calc(curArr, user_results, username):
        results = {}
        specs = {'GBP': 1,'USD': 2, 'EUR': 3}
        for item in curArr:
                if item in specs:
                        results[item] = specs[item]
                for (key, value) in results.items():
                        setattr(Results, key, value)
                        Results.save()
        return(results)

в models.py

class Results(models.Model):
    Currency = models.CharField(max_length=32)
    Value = models.IntegerField()
    Units = models.CharField(max_length=4)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

Чтобы увидеть, что таблица результатов обновляется с помощью:

Username | Currency | Value | Units|

           GBP         1
           EUR         3

, но вместо этого я получаю: Results.save() TypeError: save () отсутствует 1 обязательный позиционный аргумент: 'self'

1 Ответ

1 голос
/ 13 мая 2019

Я все еще не совсем уверен, что вы пытаетесь сделать здесь - я не знаю, например, что делают аргументы username или user_results, но основная идея проста:

for currency, value in results.items():
    result = Results.objects.get(Currency=currency)
    result.Value = value
    result.save()

или вы можете сделать его немного более эффективным:

for currency, value in results.items():
    Results.objects.filter(Currency=currency).update(Value=value)

, где нет необходимости звонить save().

Редактировать

Теперь вы пояснили, что хотите создавать новые результаты. Итак:

user = User.objects.get(username=username)
for currency, value in results.items():
    Results.objects.create(Currency=currency, Value=value, user=user)
...