Как передать вход формы в качестве переменной в мой метод класса - PullRequest
0 голосов
/ 13 апреля 2019

Короткий вопрос: как я могу передать введенные пользователем данные из формы в параметр класса моего метода?

Пользователь вводит число, и это число используется в методе для умножения другого значения изполя класса.

Я перепробовал десятки вещей, но не понял, что я делаю неправильно. Если я обновлю метод, чтобы использовать константу вместо переменной, все будет отображаться так, как я хочу в шаблоне

Я продолжаю сталкиваться с ошибкой отсутствующих позиционных аргументов.

Модель

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

    def __str__(self):
        return self.sku

    def multi(self, n = 2):      #setting up a default of 2 initiate
        np = self.price * n      #the method and show self.multi in template
        return np              

Представления

def index(request):
    list = Product.objects.all()

    if request.method == "POST":
        form = Input(request.POST or None)

        if form.is_valid():
            value = request.POST.get('data')
            value = form.cleaned_data.get('data')
            x = Product.multi()           # code broken, it does not 
            x(value)                      # initialize the method

    else:
        form = Input(request.POST or None)

Форма

class Input(forms.Form):
    data = forms.DecimalField()

шаблон: что-то вокруг


        {% for item in list %}
        <div>
     {{ item.sku }} {{ item.price }} {{ item.multi }} </div>
{% endfor %}

1 Ответ

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

Я верю, что то, что вы пытаетесь достичь, может быть сделано с помощью шаблонов тегов и фильтров.Поскольку по умолчанию вы не можете отправлять параметры в метод экземпляра класса через систему шаблонов Django, вам нужно проявить творческий подход с тегами шаблона.https://docs.djangoproject.com/en/2.2/howto/custom-template-tags/

Я бы сделал следующее:

# tags.py
from django import template
register = template.Library()
@register.filter
def multi(product, multiple):
    return product.multi(multiple)

На ваш взгляд

def index(request):
    list = Product.objects.all()
    value = 2  # some default you want
    form = Input(request.POST or None)
    if request.method == "POST":
        if form.is_valid():
            value = form.cleaned_data.get('data')
    return render(request, 'template.html', {'value': value, 'form': form, 'list': list})

В вашем шаблоне

{% load tags %}
{% for item in list %}
    <div>{{ item.sku }} {{ item.price }} {{ item|multi:value }} </div>
{% endfor %}

Где value - это значение, введенное в форму, которое вы можете вставить в контекст страницы шаблона, отображаемой

Надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...