簡體   English   中英

form.is_valid() 未按預期工作 django

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM