python - Django:限制可能的日期

标签 python django

我是 Django 新手。我正在使用 Django 1.8 和 Python 3.4。

class Card(models.Model):
    STATUS_EXPIRED = "EX"
    STATUS_ACTIVE = "AC"
    STATUS_DEACTIVATED = "DE"
    STATUS_CHOICES = (
         (STATUS_ACTIVE, "Active"),
         (STATUS_EXPIRED, "Expired"),
         (STATUS_DEACTIVATED, "Deactivated")
    )

    id = models.AutoField(primary_key = True)
    series = models.CharField(verbose_name="Series", max_length=8, null=False, blank=False)
    number = models.CharField(verbose_name="Number", max_length=16, null=False, blank=False)
    issue_date = models.DateTimeField(verbose_name="Issue Date", auto_now=True, null=False, blank=False)
    expire_date = models.DateTimeField(verbose_name="Expiry Date", auto_now=False, null=False, blank=False)
    status = models.CharField(verbose_name="Status", max_length=3, null=False, blank=False, default="AC")

如何确保数据库中的 expire_date 永远不会小于 issue_date?创建 Card 类的对象时,如何在 Django 管理界面中强制执行此条件?

最佳答案

您可以像这样在管理中进行表单验证;

from models import Card
from django.contrib import admin
from django import forms


class CardForm(forms.ModelForm):
    class Meta:
        model = Card
        fields = ('series', 'number', 'issue_date', 'expire_date', 'status')

    def clean(self):
        issue_date = self.cleaned_data.get('issue_date')
        expire_date = self.cleaned_data.get('expire_date')
        if expire_date < issue_date:
            raise forms.ValidationError("Wrong dates")
    return self.cleaned_data


class CardAdmin(admin.ModelAdmin):
    form = CardForm
    list_display = ('series', 'number', 'issue_date', 'expire_date', 'status')

admin.site.register(Card, CardAdmin)

关于python - Django:限制可能的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33608417/

相关文章:

python - keras 用于添加两个密集层

python - 这些 for 循环中哪一个更有效/更好的循环编码方式

python - win32gui:如何获取窗口的状态栏文本?

python - 将 Dagster 与 Django 集成

django - 两个字段中的小部件填充值

python - 为什么在 Google App Engine 上使用 XHTML2PDF 时我的图像不显示?

javascript - Ajax 呈现的按钮未触发单击事件

python - Google App Engine 上的 Django 在开发环境中使用 Cloud SQL

Python 和 Tkinter - 设置标签文本变量的按钮命令问题

python - 使用 pip 更新到 Django 1.7