【发布时间】:2022-01-24 23:02:56
【问题描述】:
实际上一切正常,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.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 %}
一切正常。没有错误即将到来,但无法正常工作。提前致谢
【问题讨论】:
标签: django django-models django-views django-forms django-templates