簡體   English   中英

Django,Python-如何創建一個用戶只能選擇10000到100000之間的數字的字段?

[英]Django, Python - How do I create a field where the user can only choose a number between 10000 and 100000?

我正在寫一個用戶可以在瀏覽器中填寫的表格。 問題之一涉及選擇一個介於10000和100000之間的數字。我將如何提示用戶執行此操作? 如果沒有,我希望彈出一條消息,以使他們實際選擇10000到100000之間的數字。處理此特定數字的變量稱為借款 表單上的數據當前保存在sqlite3表中。

這是我的models.py

from django.db import models
from django.core.validators import MinValueValidator
from django.core.validators import MaxValueValidator


class User(models.Model):
    #to store user data

    firstname = models.CharField(max_length=100)
    surname = models.CharField(max_length=100)
    email = models.CharField(max_length=100)
    telephone_number = models.CharField(max_length=15)
    company_name = models.CharField(max_length=100)
    company_street_address = models.CharField(max_length=100)
    city = models.CharField(max_length=100)
    postcode = models.CharField(max_length=10)
    company_number = models.CharField(max_length=9)

    filter_choices = (
        ('retail', 'Retail'),
        ('professional services', 'Professional Services'),
        ('food & drink', 'Food & Drink'),
        ('entertainment', 'Entertainment'),
    )
    business_sector = models.CharField(max_length=100, choices=filter_choices)
    days = models.CharField(max_length=5)
    reason_for_loan = models.CharField(max_length=2000)

    #borrowing = models.IntegerField(choices=[(i, i) for i in range(1, 1)], blank=True)
    #borrowing = models.IntegerField((validators=[MaxValueValidator(100),MinValueValidator(1)])
    borrowing = models.IntegerField(validators=[MinValueValidator(1),MaxValueValidator(100)])

    if 10000 <= borrowing <= 100000:
        #borrowing = models.CharField(max_length=100)

        def __str__(self):
            return self.firstname

如您所見,我已經嘗試了很多運氣不好的東西。

這是我的forms.py

from django import forms
from django.core.validators import MinValueValidator
from django.core.validators import MaxValueValidator

class UserForm(forms.Form):

    firstname = forms.CharField(max_length=100)
    surname = forms.CharField(max_length=100)
    email = forms.CharField(max_length=100)
    telephone_number = forms.CharField(max_length=15)
    company_name = forms.CharField(max_length=100)
    company_street_address = forms.CharField(max_length=100)
    city = forms.CharField(max_length=100)
    postcode = forms.CharField(max_length=10)
    company_number = forms.CharField(max_length=9)

    filter_choices = (
        ('retail', 'Retail'),
        ('professional services', 'Professional Services'),
        ('food & drink', 'Food & Drink'),
        ('entertainment', 'Entertainment'),
    )

    business_sector = forms.ChoiceField(choices = filter_choices)

    days = forms.CharField(max_length=5)
    reason_for_loan = forms.CharField(max_length=2000,widget=forms.Textarea)

    borrowing = forms.IntegerField(validators=[MinValueValidator(10000),MaxValueValidator(100000)])




##    business_sector = forms.CharField(  
##        ('retail', 'retail'),
##  ('professional_services', 'professional_services'),
##  ('food_&_drink', 'food_&_drink'),
##  ('entertainment', 'entertainment'))

這是我的views.py

from django.shortcuts import render
from users.forms import UserForm
from users.models import User

# the function executes with the signup url to take the inputs 
def signup(request):
    if request.method == 'POST':  # if the form has been filled
        form = UserForm(request.POST)
        if form.is_valid():
            # creating user data

            user_obj = form.save()
            return render(request, 'users/signup.html', {'user_obj': user_obj,'is_registered':True })  # Redirect after POST

            firstname = request.POST.get('firstname', '')
            surname = request.POST.get('surname', '')
            email = request.POST.get('email', '')
            telephone_number = request.POST.get('telephone_number', '')
            company_name = request.POST.get('company_name', '')
            company_street_address = request.POST.get('company_street_address', '')
            city = request.POST.get('city', '') 
            postcode = request.POST.get('postcode', '') 
            company_number = request.POST.get('company_number', '')
            form = request.POST.get('form', '')
            business_sector = request.POST.get('business_sector', '')
            borrowing = request.POST.get('borrowing', '')        
            days = request.POST.get('days', '')
            reason_for_loan = request.POST.get('reason_for_loan', '')

            user_obj = User(firstname=firstname, surname=surname, email=email,
            telephone_number=telephone_number,company_name=company_name,
                    company_street_address=company_street_address,city=city,
                    postcode=postcode,company_number=company_number,
                    business_sector=business_sector,borrowing=borrowing,
                    days=days,reason_for_loan=reason_for_loan)

            # saving all the data in the current object into the database
    else:
        form = UserForm()  # an unboundform
        return render(request, 'users/signup.html', {'form': form})

#the function executes with the showdata url to display the list of registered users
def showdata(request):
    all_users = User.objects.all()
    return render(request, 'users/showdata.html', {'all_users': all_users, })

這是我的html

<!-- The alert box to be shown when the submit button is clicked-->
{% if is_registered %}
    <script>alert("You are successfully registered with your new business with:{{user_obj.company_name }} and Email: {{ user_obj.email }}")</script>
    {% else %}
    <form action="{% url 'users:signup' %}"  method="post">
    {% csrf_token %}
   {{ form }}
    <br />
    <br />
    <input type="submit" value="Submit">
    </form>
{% endif %}
<br />

您將在表格中放入這種驗證代碼。 閱讀文檔以獲取更多信息

例如:

class UserForm(forms.Form):

   ...

   def clean_borrowing(self):
       borrowing = self.cleaned_data['borrowing']
       if not 10000 < borrowing < 100000:
           raise forms.ValidationError("Please enter a borrowing value between " \
                                       "10000 and 100000")

       return borrowing

首先,您根本不干

您應該使用Django的ModelForm ,讓生活更輕松!

因此,您應該保持模型不變(也可以刪除validators參數),並將forms.py更改為:

# forms.py

from .models import User

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = '__all__'

    def clean_borrowing(self):
       borrowing = self.cleaned_data['borrowing']
       if not 10000 < borrowing < 100000:
           raise forms.ValidationError("Your error message here")
       return borrowing

最后,在您的views.py節省一些時間並編寫:

# views.py

def signup(request):

    # GET request. Create an unbound form
    form = UserForm()

    if request.method == 'POST':  # if the form has been filled
        form = UserForm(request.POST)
        if form.is_valid():
            # Form is valid. Because the Form (ModelForm) is bound to the User model, then it will create, save in db and return the instance automatically.
            user_obj = form.save()
            return render(request, 'users/signup.html', {'user_obj': user_obj,'is_registered':True })  # Redirect after POST

    return render(request, 'users/signup.html', {'form': form})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM