![](/img/trans.png)
[英]How can I create a random number between two entry field numbers in python tkinter?
[英]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.