【问题标题】:Django REST Framework update date CreatedDjango REST Framework 更新日期 创建
【发布时间】:2020-11-11 07:25:20
【问题描述】:

我有一个连接到 Django REST Framework API 的博客应用程序。我能够使用 API 调用创建、删除和更新帖子,但我在更新时间创建字段时遇到了困难。我想要做的是在编辑帖子时用当前时间更新时间。因此,如果帖子是在 2020 年 7 月 21 日晚上 10 点创建的,然后在 2020 年 7 月 21 日晚上 10:05 进行编辑,我希望根据编辑时间更改时间。关于我如何做到这一点的任何想法。我正在使用这个 fetch 调用来进行更新。

var url = "http://127.0.0.1:8000/api/blogs/";
            var type = "POST";

            if (active != null) {
                url = `http://127.0.0.1:8000/api/blogs/${active.id}/`;
                type = "PUT";
            }

            fetch(url, {
                method: type,
                headers: {
                    "Content-type": "application/json",
                    "X-CSRFToken": csrftoken,
                },
                body: JSON.stringify({
                    'title': form.title.value,
                    'body': form.body.value,
                    'user': user,
                })
            }).then(function (response) {
                handlePosts()
                location.reload()
                form.reset()
            })

        })

我尝试在正文中发送 new Date() ,但它似乎不起作用。 如果我在 cmets 中添加下面的保存方法,这是我的 models.py:

class BlogModel(models.Model):

    user = models.ForeignKey(
        UserModel, on_delete=models.SET_NULL, null=True, blank=True)
    title = models.CharField(max_length=200, null=True, blank=True)
    body = models.CharField(max_length=1000, null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True, null=True, blank=True)

    def __str__(self):
        return str(self.user) + ", " + str(self.title)

    def save(self, *args, **kwargs):
       self.created = timezone.now()
       return super().save(*args, **kwargs)

我最初的想法是我需要覆盖视图集的保存方法,但仍在处理它... 任何帮助表示赞赏:D

【问题讨论】:

    标签: javascript django django-rest-framework


    【解决方案1】:
    class BlogModel(models.Model):
        user = models.ForeignKey(
            UserModel, on_delete=models.SET_NULL, null=True, blank=True)
        title = models.CharField(max_length=200, null=True, blank=True)
        body = models.CharField(max_length=1000, null=True, blank=True)
        created = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    
        def __str__(self):
            return str(self.user) + ", " + str(self.title)
        
        def save(self, *args, **kwargs):
            if self.pk:
               self.created = timezone.now()
    
        super().save(*args, **kwargs)
    

    试试这个代码,它会工作,因为你正在尝试一个 PUT 请求

    【讨论】:

      【解决方案2】:

      要更新创建的时间字段,您可以覆盖您的帖子模型的save() 方法以节省时间。你不需要从你的前端发送这个。例如:

      from django.utils import timezone
      
      
      class Post(models.Model):
         ...
         fields
         ...
         
      
         def save(self, *args, **kwargs):
             self.time_created_field = timezone.now()
             return super().save(*args, **kwargs)
      

      【讨论】:

      • 听起来不错,但是当我实现该保存方法时,它根本不保存
      • @adamkb96 请将模型和保存方法添加到您的问题中
      猜你喜欢
      • 1970-01-01
      • 2019-05-29
      • 2015-05-21
      • 2023-03-31
      • 2016-05-03
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多