在 Django 中使用 id 预填充表单数据?
Pre filled form data using id in Django?
实际上一切正常,Id 也进入了 URL 但是当我点击更新按钮时数据没有进入字段
这是我的代码
这是我创建的模型
#Models.py
from django.db import models
class User(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
mobile_number = models.IntegerField()
cnic = models.CharField(max_length = 13)
blood_group = models.CharField(max_length= 10)
last_donation = models.DateTimeField(auto_now_add=True)
这是我的观点
#views.py
from django.shortcuts import render,redirect
from .models import *
from .forms import UserForm
from django.urls import reverse
def home(request):
data = User.objects.all() #This function display All data on homePage
context = {
'data': data
}
return render(request, 'home.html',context)
def donor(request):
if request.method == "POST":
userform = UserForm(request.POST) #This Add New User
if userform.is_valid():
userform.save()
else:
userform = UserForm()
return render(request, 'donor.html',{'userform':userform,})
def Update(request,pk):
context = {}
if request.method == "POST":
p_id = User.objects.get(pk = pk)
form = UserForm(request.POST or None, instance= p_id)
if form.is_valid():
form.save()
return redirect(reverse('home'))
context['form'] = UserForm()
return render(request, 'update.html',context)
这是我的URLS
#urls.py
from django.urls import path
from blood import views
urlpatterns = [
path('',views.home, name='home'),
path('donor/', views.donor, name = 'donor'),
path('update/<int:pk>', views.Update, name='update'),
]
这是我创建并检查验证的表单
#forms.py
from django.forms import ModelForm
from .models import User
from datetime import timedelta
from django.utils.timezone import datetime
from django.core.exceptions import ValidationError
class UserForm(ModelForm):
class Meta:
model = User
fields = "__all__"
def clean_cnic(self):
cnic = self.cleaned_data['cnic']
if not User.objects.filter(cnic=cnic).exists():
return cnic
try:
u_obj = User.objects.get(cnic = cnic)
except User.DoesNotExist:
raise ValidationError("User Does not exist")
if u_obj:
previous_date = u_obj.last_donation
current_date = datetime.now().astimezone()
final = current_date - previous_date
print(final)
if final < timedelta(days = 90):
raise ValidationError("U have to wait 90 days to complete")
return cnic
def clean_blood_group(self):
cnic = self.cleaned_data.get("cnic")
blood_group = self.cleaned_data['blood_group']
if not User.objects.filter(cnic = cnic).exists():
return blood_group
obj = User.objects.get(cnic = cnic)
if obj.blood_group == blood_group:
return blood_group
raise ValidationError("Blood group does not match")
这是 HTML 与更新功能一起使用的代码
#update.html
{% extends 'base.html' %}
{% block title %}
update
{% endblock %}
{% block body %}
<div class = 'container mt-5 pt-6'>
<div class = 'col-md-5 mx-auto'>
<h3>This is update Page</h3>
<form method = "POST" action="">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="mb-3">
{{ form.cnic.errors }}
<label class="form-label">Enter CNIC</label>
<input type="text" class="form-control" name = "cnic" >
{{cnic}}
</div>
<div class="mb-3">
<label class="form-label">First Name</label>
<input type="text" class="form-control" name = 'first_name'>
{{first_name}}
</div>
<div class="mb-3">
<label class="form-label">Last Name</label>
<input type="text" class="form-control" name = "last_name" >
{{last_name}}
</div>
<div class="mb-3">
<label class="form-label">Mobile Number</label>
<input type="text" class="form-control" name = "mobile_number" >
{{mobile_number}}
</div>
<div class="mb-3">
{{ form.blood_group.errors}}
<label class="form-label">Blood Group</label>
<input type="text" class="form-control" name = "blood_group">
{{blood_group}}
</div>
<button type="submit" class="btn btn-primary" value="update">Submit</button>
</form>
</div>
</div>
{% endblock %}
一切正常。没有错误出现但无法正常工作。提前致谢
更新表单的更好方法是添加一个表单初始值来保存需要更新的字段数据。此外,您还在表单上下文变量上调用了表单对象(context['form'] = UserForm()),这使得它不保存数据
def Update(request,pk):
context = {}
if request.method == "POST":
p_id = User.objects.get(pk = pk)
form = UserForm(request.POST or None, instance=p_id)
if form.is_valid():
form.save()
return redirect(reverse('home'))
else:
form = UserForm(
initial={
'cnic':p_id.cnic
'first_name':p_di.first_name,
'last_name' :p_id.lasr_name,
'mobile_number':p_di.mobile_number,
'blood_group': p_di.blood_group,})
context['form'] = form
return render(request, 'update.html',context)
下面介绍表单编辑中的数据如何更新
#update.html
{% extends 'base.html' %}
{% block title %}
update
{% endblock %}
{% block body %}
<div class = 'container mt-5 pt-6'>
<div class = 'col-md-5 mx-auto'>
<h3>This is update Page</h3>
<form method = "POST" action="">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="mb-3">
{{ form.cnic.errors }}
<label class="form-label">Enter CNIC</label>
<input type="text" class="form-control" name = "cnic" value="{{form.initial.cnic}}">
</div>
<div class="mb-3">
<label class="form-label">First Name</label>
<input type="text" class="form-control" name = 'first_name' value="{{form.initial.first_name}}">
</div>
<div class="mb-3">
<label class="form-label">Last Name</label>
<input type="text" class="form-control" name = "last_name" value="{{form.initial.last_name}}" >
</div>
<div class="mb-3">
<label class="form-label">Mobile Number</label>
<input type="text" class="form-control" name = "mobile_number" value="{{form.initial.mobile_number}}" >
</div>
<div class="mb-3">
{{ form.blood_group.errors}}
<label class="form-label">Blood Group</label>
<input type="text" class="form-control" name ="blood_group" value="{{form.initial.blood_group}}">
</div>
<button type="submit" class="btn btn-primary" value="update">Submit</button>
</form>
</div>
</div>
{% endblock %}
实际上一切正常,Id 也进入了 URL 但是当我点击更新按钮时数据没有进入字段 这是我的代码
这是我创建的模型
#Models.py
from django.db import models
class User(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
mobile_number = models.IntegerField()
cnic = models.CharField(max_length = 13)
blood_group = models.CharField(max_length= 10)
last_donation = models.DateTimeField(auto_now_add=True)
这是我的观点
#views.py
from django.shortcuts import render,redirect
from .models import *
from .forms import UserForm
from django.urls import reverse
def home(request):
data = User.objects.all() #This function display All data on homePage
context = {
'data': data
}
return render(request, 'home.html',context)
def donor(request):
if request.method == "POST":
userform = UserForm(request.POST) #This Add New User
if userform.is_valid():
userform.save()
else:
userform = UserForm()
return render(request, 'donor.html',{'userform':userform,})
def Update(request,pk):
context = {}
if request.method == "POST":
p_id = User.objects.get(pk = pk)
form = UserForm(request.POST or None, instance= p_id)
if form.is_valid():
form.save()
return redirect(reverse('home'))
context['form'] = UserForm()
return render(request, 'update.html',context)
这是我的URLS
#urls.py
from django.urls import path
from blood import views
urlpatterns = [
path('',views.home, name='home'),
path('donor/', views.donor, name = 'donor'),
path('update/<int:pk>', views.Update, name='update'),
]
这是我创建并检查验证的表单
#forms.py
from django.forms import ModelForm
from .models import User
from datetime import timedelta
from django.utils.timezone import datetime
from django.core.exceptions import ValidationError
class UserForm(ModelForm):
class Meta:
model = User
fields = "__all__"
def clean_cnic(self):
cnic = self.cleaned_data['cnic']
if not User.objects.filter(cnic=cnic).exists():
return cnic
try:
u_obj = User.objects.get(cnic = cnic)
except User.DoesNotExist:
raise ValidationError("User Does not exist")
if u_obj:
previous_date = u_obj.last_donation
current_date = datetime.now().astimezone()
final = current_date - previous_date
print(final)
if final < timedelta(days = 90):
raise ValidationError("U have to wait 90 days to complete")
return cnic
def clean_blood_group(self):
cnic = self.cleaned_data.get("cnic")
blood_group = self.cleaned_data['blood_group']
if not User.objects.filter(cnic = cnic).exists():
return blood_group
obj = User.objects.get(cnic = cnic)
if obj.blood_group == blood_group:
return blood_group
raise ValidationError("Blood group does not match")
这是 HTML 与更新功能一起使用的代码
#update.html
{% extends 'base.html' %}
{% block title %}
update
{% endblock %}
{% block body %}
<div class = 'container mt-5 pt-6'>
<div class = 'col-md-5 mx-auto'>
<h3>This is update Page</h3>
<form method = "POST" action="">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="mb-3">
{{ form.cnic.errors }}
<label class="form-label">Enter CNIC</label>
<input type="text" class="form-control" name = "cnic" >
{{cnic}}
</div>
<div class="mb-3">
<label class="form-label">First Name</label>
<input type="text" class="form-control" name = 'first_name'>
{{first_name}}
</div>
<div class="mb-3">
<label class="form-label">Last Name</label>
<input type="text" class="form-control" name = "last_name" >
{{last_name}}
</div>
<div class="mb-3">
<label class="form-label">Mobile Number</label>
<input type="text" class="form-control" name = "mobile_number" >
{{mobile_number}}
</div>
<div class="mb-3">
{{ form.blood_group.errors}}
<label class="form-label">Blood Group</label>
<input type="text" class="form-control" name = "blood_group">
{{blood_group}}
</div>
<button type="submit" class="btn btn-primary" value="update">Submit</button>
</form>
</div>
</div>
{% endblock %}
一切正常。没有错误出现但无法正常工作。提前致谢
更新表单的更好方法是添加一个表单初始值来保存需要更新的字段数据。此外,您还在表单上下文变量上调用了表单对象(context['form'] = UserForm()),这使得它不保存数据
def Update(request,pk):
context = {}
if request.method == "POST":
p_id = User.objects.get(pk = pk)
form = UserForm(request.POST or None, instance=p_id)
if form.is_valid():
form.save()
return redirect(reverse('home'))
else:
form = UserForm(
initial={
'cnic':p_id.cnic
'first_name':p_di.first_name,
'last_name' :p_id.lasr_name,
'mobile_number':p_di.mobile_number,
'blood_group': p_di.blood_group,})
context['form'] = form
return render(request, 'update.html',context)
下面介绍表单编辑中的数据如何更新
#update.html
{% extends 'base.html' %}
{% block title %}
update
{% endblock %}
{% block body %}
<div class = 'container mt-5 pt-6'>
<div class = 'col-md-5 mx-auto'>
<h3>This is update Page</h3>
<form method = "POST" action="">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="mb-3">
{{ form.cnic.errors }}
<label class="form-label">Enter CNIC</label>
<input type="text" class="form-control" name = "cnic" value="{{form.initial.cnic}}">
</div>
<div class="mb-3">
<label class="form-label">First Name</label>
<input type="text" class="form-control" name = 'first_name' value="{{form.initial.first_name}}">
</div>
<div class="mb-3">
<label class="form-label">Last Name</label>
<input type="text" class="form-control" name = "last_name" value="{{form.initial.last_name}}" >
</div>
<div class="mb-3">
<label class="form-label">Mobile Number</label>
<input type="text" class="form-control" name = "mobile_number" value="{{form.initial.mobile_number}}" >
</div>
<div class="mb-3">
{{ form.blood_group.errors}}
<label class="form-label">Blood Group</label>
<input type="text" class="form-control" name ="blood_group" value="{{form.initial.blood_group}}">
</div>
<button type="submit" class="btn btn-primary" value="update">Submit</button>
</form>
</div>
</div>
{% endblock %}