亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django:表單驗證 - 日期不是過去的,用戶唯一的日期

Django:表單驗證 - 日期不是過去的,用戶唯一的日期

GCT1015 2023-04-18 14:25:05
我在 Django 中定義表單時遇到問題(python 3.7,django 3.0.8)我創建了一個模型。這個模型有兩個非常重要的字段:date 和 user_id。要求:date和user_id是唯一的。我創建了一個與模型關聯的表單模型。登錄用戶填寫表格,重要的是定義的日期不能是過去的,也不能出現在數據庫中。我的問題:一個問題:我的驗證與過去的日期相關聯 WORKS CORRECT[!],但如果給出了過去的日期,則不會顯示任何錯誤消息。第二個問題:第二件事是我不知道如何防止定義數據,它存在于數據庫中。代碼:模型.pyclass MyModel(models.Model):    user = models.ForeignKey(User, on_delete=models.CASCADE)    date = models.DateField()    ...(other fields)    class Meta:        unique_together = [['user', 'date']]代碼:forms.pyclass AddMyModel(forms.Form):    date = forms.DateField(widget=DateInput(attrs={'type': 'date'}),                           )    def clean_date(self):        date = self.cleaned_data['date']        if date < timezone.now().date():            raise ValidationError("Date cannot be in the past")        return date您是否知道如何設計表單以在模板中顯示錯誤“日期不能來自過去”和錯誤“給定日期已定義”?views.pydef add(request):    if request.user.is_authenticated:        user = request.user.id        if request.method == 'POST':            form = AddMyModel(request.POST)            if form.is_valid():                date = form['date'].value()                mymodel= MyModel(user=User(pk=user), date=date)                mymodel.save()                return render(request, 'mysite/successfuladd.html', {"login": True})        form = AddMyModel()        return render(request, 'mysite/add.html', {'form': form, 'login': True})    else:        return render(request, 'mysite/homepage.html', {'login': False})
查看完整描述

2 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

用日期時間試試這個:


def clean_date(self):

    date = self.cleaned_data['date']

    if date < datetime.date.today():

        raise ValidationError(self.error_messages['Date cannot be in the past'], code='Date cannot be in the past')

    return date


查看完整回答
反對 回復 2023-04-18
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

我設法自己解決了這個問題。我的模型是一樣的。


forms.py


class AddMyModel(forms.ModelForm):

    def clean_date(self):

        date = self.cleaned_data['date']

        if date < timezone.now().date():

            raise forms.ValidationError(message='Date cannot be in the past')

        return date


    class Meta:

        model = MyModel

        fields = ('date')

        widgets = {

            'date': forms.DateInput(attrs={'type': 'date'})

        }

views.py


def add(request):

    if request.user.is_authenticated:

        user = request.user.id

        if request.method == 'POST':

            form = AddMyModel(request.POST)

            if form.is_valid():

                date = form['date'].value()

                if MyModel(user=User(pk=user), date=date):

                    unique_error = "User and date is already exist."

                    return render(request, 'mysite/add.html',

                                  {'form': form, 'login': True, 'unique_error': unique_error})

                else:

                    mymodel= MyModel(user=User(pk=user), date=date)

                    mymodel.save()

                    return render(request, 'mysite/successfuladd.html', {"login": True})

            return render(request, 'mysite/add.html',

                          {'form': form, 'login': True})

        form = AddMyModel()

        return render(request, 'mysite/add.html', {'form': form, 'login': True})

    else:

        return render(request, 'mysite/homepage.html', {'login': False})


查看完整回答
反對 回復 2023-04-18
  • 2 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號