【问题标题】:django.core.exceptions.FieldError: 'date' cannot be specified for Forum model form as it is a non-editable fielddjango.core.exceptions.FieldError:不能为论坛模型表单指定“日期”,因为它是不可编辑的字段
【发布时间】:2020-12-05 14:21:40
【问题描述】:

这是我的models.py

# Create your models here.
class Forum(models.Model):
    publisher = models.CharField('Публикатор', max_length=50, default='Anonymous')
    topic = models.CharField('Название', max_length=50)
    text = models.TextField('Текст')
    date = models.DateField(auto_now_add=True)
    comment = models.CharField('Комментарий', max_length=100, default='Комментарий')
    # slug = models.SlugField(max_length=200, unique=True, default='default')

    class Meta:
        verbose_name = 'Пост'
        verbose_name_plural = 'Посты'

    def __str__(self):
        return self.topic

如何解决这样的问题,我也试过set editable=True。它没有帮助。

【问题讨论】:

标签: python django


【解决方案1】:

问题出在

date = models.DateField(auto_now_add=True)

在这里,您将其设置为auto_now_add=True,它将自动添加当前日期时间,但以后无法编辑。尝试用它替换

from django.utils import timezone

date = models.DateTimeField(default=timezone.now)

以下来自doc1

DateField.auto_now_add¶ 首次创建对象时自动将字段设置为现在。用于创建时间戳。请注意,始终使用当前日期;它不仅仅是您可以覆盖的默认值。因此,即使您在创建对象时为此字段设置了值,它也会被忽略。如果您希望能够修改此字段,请设置以下内容而不是 auto_now_add=True:

对于 DateField: default=date.today - from datetime.date.today() For DateTimeField: default=timezone.now - 来自 django.utils.timezone.now()

【讨论】:

  • 它现在说:NameError: name 'timezone' is not defined
  • 成功了,谢谢。但是为什么 auto_now_add 不起作用我不明白。
  • 您是否查看了我从 django doc 复制的答案中的引用?它说该字段用于生成时间戳,不能修改...
  • 所以,今天我们需要设置时区,即使过去设置 auto_now_add=True 是正确的。我这么说是因为在视频中我看到人们实际上设置了 auto_now_add=True。对不起,我没听懂
  • timezone.now() 和 autO_now_add 都会在您生成时添加当前时间。关键区别在于 timezone.now() 设置为默认值。意味着如果您不执行任何操作,它将使用当前时间,但是,如果您愿意,可以稍后更改。 auto_now_add=True 将不允许您稍后编辑。
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
相关资源
最近更新 更多