gpt4 book ai didi

python - 为帐户指定的 FieldError : Unknown field(s) (created_at, Modified_at)

转载 作者:行者123 更新时间:2023-12-01 02:56:54 27 4
gpt4 key购买 nike

我正在尝试为我的模型 Account 创建时间戳,但我不想要我的两个时间戳(created_atmodified_at )可供用户编辑甚至查看。一切工作正常且符合预期,直到我将 editable=False 添加到 created_atmodified_at 字段。这是我的模型:

class Account(models.Model):
account_name = models.CharField(max_length=25)
active = models.BooleanField(default=True)
created_at = models.DateTimeField(null=True, blank=True, editable=False)
modified_at = models.DateTimeField(null=True, blank=True, editable=False)

def save(self):
if self.id:
self.modified_at = datetime.datetime.now()
else:
self.created_at = datetime.datetime.now()
super(Account, self).save()

class Meta:
ordering = ('id',)

这是当我尝试执行任何操作(迁移、运行服务器等)时遇到的晦涩错误:

django.core.exception.FieldError:为帐户指定了未知字段(created_at、modified_at)

一旦我从两个字段中删除 editable=False ,一切就正常了。这是 Django 错误吗?有没有更好的方法使用户无法查看和编辑该字段?

我正在使用 Django 1.9 和 Python 3.6.1。感谢您的帮助,如果您需要我发布其他内容( View 、序列化程序等),请告诉我。

编辑

完整回溯:https://pastebin.com/YEQACX5z

账户表格:

class AccountForm(ModelForm):
class Meta:
model = Account
fields = ['account_name', 'active', 'created_at', 'modified_at']

最佳答案

你可以这样做,

created_at = models.DateTimeField(auto_now_add=True)

modified_at = models.DateTimeField(auto_now=True)

来自文档

DateField.auto_now¶

Automatically set the field to now every time the object is saved. Useful for “last-modified” timestamps. Note that the current date is always used; it’s not just a default value that you can override.

The field is only automatically updated when calling Model.save(). The field isn’t updated when making updates to other fields in other ways such as QuerySet.update(), though you can specify a custom value for the field in an update like that.

DateField.auto_now_add¶

Automatically set the field to now when the object is first created. Useful for creation of timestamps. Note that the current date is always used; it’s not just a default value that you can override. So even if you set a value for this field when creating the object, it will be ignored.

因此,无需添加 editable=False,它已经不可编辑。

此外,请记住删除您的 save() 方法覆盖,因为它正在尝试修改这些字段。

如果您希望能够修改此字段,请设置以下内容而不是 auto_now_add=True:

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

此字段的默认表单小部件是 TextInput。管理员添加了一个 JavaScript 日历和“今天”的快捷方式。包括一个额外的 invalid_date 错误消息键。

关于python - 为帐户指定的 FieldError : Unknown field(s) (created_at, Modified_at),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44137599/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com