[英]form.is_valid() not working as intended django
我是 django 的新手,我正在嘗試制作一個考勤系統,用戶可以在其中輸入他們的姓名並按下打卡或打卡,但是當我測試代碼時。 但是每當我輸入名稱並按時鍾時,它不會將名稱和時間保存到數據庫中。
視圖.py:
def home(response):
form = CreateNewList()
empName = employeeName.objects.all
if response.method == "POST":
form = CreateNewList(response.POST)
if 'clockIn' in response.POST:
if form.is_valid():
n = form.cleaned_data["name"]
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
t = Name(name = n, timeIn=current_time)
t.save()
return redirect('/')
else:
form = CreateNewList()
return render(response, "main/home.html", context={"form":form, "empName":empName})
模型.py:
class employeeName(models.Model):
employee = models.CharField(max_length=200)
total_Hours_Worked = models.CharField(max_length=8, default="Empty")
def __str__(self):
return self.employee
class Name(models.Model):
name = models.ForeignKey(employeeName, null=True,on_delete=models.CASCADE)
timeIn = models.TimeField()
timeOut = models.TimeField(default=datetime.now())
date = models.DateField(auto_now=True)
def __str__(self):
return str(self.name)
forms.py:
class CreateNewList(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(CreateNewList, self).__init__(*args, **kwargs)
self.fields['name'].widget = TextInput()
class Meta:
model = Name
fields = ['name']
主頁.html:
<form method="post">
{% csrf_token %}
<div class="input-group mb-2">
<div class="input-group-prepend">
<h3 class="p2" >Clock In/Clock Out</h3>
<label>Enter Your Full Name:</label>
{{form.name}}
<datalist id="attendance">
{% for empName in empName %}
<option value="{{empName.employee}}">
{% endfor %}
</datalist>
<button type="submit" name="clockIn" value="clockIn" class="btn btn-outline-primary">Clock In</button>
<button type="submit" name="clockOut" value="clockOut" class="btn btn-outline-primary">Clock Out</button>
</div>
</div>
</form>
每當我按下clockIn按鈕在終端中打印一些東西並且沒有打印任何東西時,我都會嘗試進行測試。 我不明白我的代碼有什么問題
您遇到的問題是name
model 中的名稱是employeeName
Name
model 的外鍵。 在您的表單中,您已將name
字段的小部件更改為TextInput
。 在創建Name
對象時,Django 需要一個employeeName
object,而不是字符串。 您應該將小部件保留為默認的 model select,因此用戶將使用 select 他們的名稱而不是輸入它。 否則,您將不得不實現變得更加復雜的搜索功能。 如果用戶拼錯了他的名字怎么辦? 你如何通知用戶這件事? 他們如何確認employeeName
object 是正確的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.