form.is_valid() 没有按预期工作 django

form.is_valid() not working as intended django

我是 django 的新手,我正在尝试制作一个考勤系统,用户可以在其中输入他们的姓名并按下打卡或打卡,但是当我测试代码时。但是每当我输入一个名字并按下时钟时,它不会将名字和时间保存到数据库中。

views.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})

models.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']

home.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 模型中的 nameemployeeName 模型的外键。在您的表单中,您已将 name 字段的小部件更改为 TextInput。 Django 在创建 Name 对象时需要一个 employeeName 对象,而不是字符串。您应该将小部件保留为默认模型 select,这样用户将 select 他们的名字而不是键入它。否则,您将不得不实现变得更加复杂的搜索功能。如果用户拼错了他的名字怎么办?你如何通知用户这个?他们如何确认 employeeName 对象是正确的?