【问题标题】:How to set variable maxValue in django forms如何在 django 表单中设置变量 maxValue
【发布时间】:2021-10-17 05:20:59
【问题描述】:

我正在为销售网站编写 django 框架中的代码,并且某些商品的可用件数是有限的。 要获得剩余产品的数量,我必须调用某个函数。 现在我想问一下是否有任何方法可以在 models.py 或 forms.py 模块中调用此函数或任何其他方式来设置此限制。

这是我的视图模块:

from django.http.response import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from .forms import orderForm
from regpage.models import User
from django.views import View

class orderView(View):
    def get(self, request):
        form = orderForm()
        return render(request, "dashboard/order.html", {'form': form,})

这是我的表单模块:

from django import forms
from .models import Order

class orderForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = ['productCount']

这是我的模型模块:

from django.db import models
from django.db.models.enums import Choices
from regpage.models import User
from django.core import validators
from django.core.validators import EmailValidator, MaxValueValidator, MinValueValidator

class Order(models.Model):
    userID = models.ForeignKey(User, on_delete=models.CASCADE)
    productCount = models.PositiveSmallIntegerField() #THE LIMITED FIELD

这是我的 html 文件:

{% extends 'dashboard.html' %}

{% block dashTitle %}
    Order
{% endblock dashTitle %}


{% block dashContent %}
    <p style="text-align:center;font-size:30px;"><b> Order Page </b> </p>
    
    <form style="text-align:center;font-size:25px" method="POST">
        {% csrf_token %}
        {% for field in form %}
            <div class="form-control {% if field.errors %}errors{% endif %}">
                {{ field.label_tag }}
                {{ field }}
                {{ field.errors }}
            </div>
            <br>
        {% endfor %}
        <br>
        <button type="submit">Order</button>    
    </form>
{% endblock dashContent %}

本网站只有一个产品,需要调用一个函数来获取剩余产品的数量。

【问题讨论】:

    标签: django django-models django-views django-forms django-validation


    【解决方案1】:

    试试这个

    class orderForm(forms.ModelForm):
        quantity = forms.IntegerField(widget=forms.TextInput(
                   attrs={
                        'min':0,
                        'value':0,
                        'type':'number',
                   }))
    
        class Meta: 
            model = Order
            fields = ('__all__')
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.fields['productCount'].widget.attrs.update(
                {'max': self.instance.productCount},
            )
    

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2014-04-05
      • 2020-11-01
      • 2016-09-15
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      相关资源
      最近更新 更多