为了账号安全,请及时绑定邮箱和手机立即绑定

在模型表单中插入“隐藏时间戳字段”?

在模型表单中插入“隐藏时间戳字段”?

哆啦的时光机 2023-08-22 16:54:59
我有一个简单的表单,允许用户创建帖子。这些字段是post_title, post_content, post_date. 和将由用户提供,但 和将由系统自动生成,并给出当前时间戳post_title。因此,我只会在表格中显示和。然而,当我尝试提交请求时,这会给我一个 IntegrityError 提示。我对 Django 相当陌生,所以我真的不知道该怎么做。我希望每当用户发送 Post 请求(并且如果它通过验证)时,它都会在将其保存到数据库之前生成当前时间戳。对此有何建议?多谢!post_contentpost_datetitlecontentNOT NULL constraint failed: main_app_post.post_datepost_datemodels.py:class Post(models.Model):    post_title = models.CharField(max_length=100)    post_content = models.TextField(max_length=400)    post_date = models.DateTimeField()    def __str__(self):        return self.post_titleforms.py:class PostForm(forms.ModelForm):    class Meta:        model = models.Post        fields = ('post_title', 'post_content')views.py:    if request.method == 'POST':        form = forms.PostForm(request.POST)        if form.is_valid():            post_title = form.cleaned_data['post_title']            post_content = form.cleaned_data['post_content']            post_date = datetime.datetime.now().timestamp()            form.post_date = post_date            form.save(commit=True)
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

auto_now_add=True

class Post(models.Model):

    post_title = models.CharField(max_length=100)

    post_content = models.TextField(max_length=400)

    post_date = models.DateTimeField(auto_now_add=True)


    def __str__(self):

        return self.post_title


查看完整回答
反对 回复 2023-08-22
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

你可以指定 adefault并使其不可编辑,但实际上 Django 已经为此提供了解决方案:你可以指定auto_now_add=True[Django-doc]:

class Post(models.Model):

    post_title = models.CharField(max_length=100)

    post_content = models.TextField(max_length=400)

    post_date = models.DateTimeField(auto_now_add=True)


    def __str__(self):

        return self.post_title

这将使该字段不可编辑,因此默认情况下不会显示在表单中,而且它将使用当前时间戳作为默认值。这意味着视图和形式不再需要担心这个问题。


查看完整回答
反对 回复 2023-08-22
  • 2 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信