Django Выбор атрибута DateField для модели - PullRequest
0 голосов
/ 10 марта 2020

background: Итак, я пытаюсь построить модель «Билл» с атрибутами Name (имя получателя), Amount (сколько долларов платить) и PayDate (когда оплачивать счет).

То, на чем я застрял: Я испытываю трудности с попыткой ограничить ввод PayDate с 1 (первое число месяца) до 31 (последний день месяца (в зависимости от месяц))

Это мой код для модели:

from django.db import models

# Create your models here.


class Bill(models.Model) :
    Name = models.CharField(max_length=200, editable=True, blank=False)
    Amount = models.DecimalField(editable=True, blank=False, decimal_places=2, max_digits=6)
    PayDate = models.IntegerField(
        blank=False, editable=True)

def __str__(self):
    return f"{self.Name} @ ${self.Amount} every {self.PayDate} of the month"

Я хотел бы получить ваши предложения о том, как установить атрибут PayDate.

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Вы должны использовать DateField для хранения даты оплаты. Делая это, это всегда будет действительная дата. Добавив auto_now_add=False, вы также сможете редактировать поле.

from django.db import models

# Create your models here.


class Bill(models.Model) :
    Name = models.CharField(max_length=200, editable=True, blank=False)
    Amount = models.DecimalField(editable=True, blank=False, decimal_places=2, max_digits=6)
    PayDate = models.DateField(blank=False, auto_now_add=False)

def __str__(self):
    return f"{self.Name} @ ${self.Amount} every {self.PayDate} of the month"
0 голосов
/ 10 марта 2020

IntegerField s имеют MinValueValidator и MaxValueValidator. Валидаторы можно использовать следующим образом:

PayDate = models.IntegerField(
        blank=False, editable=True, validators=[MinValueValidator(1),MaxValueValidator(31)])

Если вы хотите, чтобы максимальное значение изменялось в зависимости от месяца, вам придется сделать это в своей форме, так как проверки на моделях фиксированы

...