Как передать аргумент (из формы) в метод Model и вернуть расчет - PullRequest
0 голосов
/ 07 апреля 2019

Я изучаю Python / Django, и у меня возникают некоторые затруднения с пониманием того, как вы вызываете / передаете аргумент в методы Models

В моем случае я беру десятичный ввод из формы, передаю его в метод моей моделии пересчитать новое значение на основе данных, которые Модель уже имеет в Sqlite3 db

, и отобразить это в моем шаблоне

Если я удалю аргумент переменной в методе модели и умножу на константу напрямуюв методе модели код работает и прекрасно отображается в шаблоне

Модели:

from django.db import models


class Product(models.Model):
    name = models.CharField(max_length=30)
    price = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return self.name

    def n_price(self, newprice):
        n_price = self.price * newprice
        return n_price

Форма:

from django import forms

class MultiForm(forms.Form):
    data = forms.DecimalField(max_digits=5, decimal_places=2)

Просмотры:

from django.shortcuts import render
from .models import Product
from .forms import MultiForm

def multi(request):
    list = Product.objects.all()
    if request.method == "POST":
        form = MultiForm(request.POST or None)
        if form.is_valid():
            data = request.POST.get('model')

    p = Product.n_price()
    p(data) 

    return render(request, 'viewinventory/multi.html', {'form': form, 'list': list, 'data': data})

Шаблон

... `` `

    {% block content %}
<h2>New price</h2>
<form method="POST" class="price-form">
    {% csrf_token %}
    {{ form }}
    <button type="submit" class="save btn btn-default">Save</button>
</form>

{% endblock%}

    {% for list in list %}
    <div>
 {{ list.name }} {{ list.price }} {{ list.n_price }} </div>

{% endfor%}

... `` `

1 Ответ

0 голосов
/ 07 апреля 2019

Вы передаете форму (не число) функции, которая вызывает проблему. Вам необходимо передать данные, поэтому измените строку Product.n_price(form) на Product.n_price(form.data), чтобы получить числовые данные из формы пространства имен.

...