选择特定选项后,如何更改 Django 模型字段的值?

Posted

技术标签:

【中文标题】选择特定选项后,如何更改 Django 模型字段的值?【英文标题】:How can I change the value of a Django model field when a particular choice is selected? 【发布时间】:2020-08-07 20:30:23 【问题描述】:

我在 django 上为博客文章创建了一个模型。每个帖子都有两种状态选择:发布或草稿。保存帖子后如何将发布更改为已发布?

这是我的代码:

从 django.db 导入模型

从 django.contrib.auth.models 导入用户

在这里创建您的模型。

状态 = ( (0,"草稿"),

(1,"发布"), )

类帖子(models.Model):

title = models.CharField(max_length=200)
slug = models.SlugField(max_length=200, unique=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
updated_on = models.DateTimeField(auto_now=True)
content = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
status = models.Integer(choices=STATUS, default=0)
class Meta:
        ordering = ['-created_on']

def __str__(self):
        return self.title

从 django.contrib 导入管理员 从 .models 导入 *

在此处注册您的模型

类 PostAdmin(admin.ModelAdmin):

list_display = ('title','slug','status','created_on',)

list_filter  = ("status",)

search_fields = ('title', 'content')

prepopulated_fields = 'slug': ('title',)

admin.site.register(Post,PostAdmin)

【问题讨论】:

【参考方案1】:

您的第一种方法是将您的值“发布”更改为“已发布”。拥有额外的“发布”状态是没有意义的。每当保存帖子时,状态字段应更改为“已发布”。如果无论如何你需要它在那里,那么你可以在你的模型中添加另一个像“is_published”这样的布尔字段,并在你的保存方法中检查它,所以只要 self.status 等于“publish”,就让这个字段为真。如果您想对模型进行额外检查;然后只需为您的模型类编写一个函数来更改“is_published”的值。

所以改变模型中“is_published”字段的值;

在您的 Post 类中: 添加

is_published = models.BooleanField(default=False)

然后覆盖你的模型保存方法:

def save(self, *args, **kwargs):
    if self.status == 1:
        self.is_published = True
    super(Post, self).save(*args, **kwargs)

【讨论】:

非常感谢。我需要它在那里,你能告诉我怎么做吗?我是 Django 新手。 我编辑了上面的答案,向您展示如何做到这一点。

以上是关于选择特定选项后,如何更改 Django 模型字段的值?的主要内容,如果未能解决你的问题,请参考以下文章

(Django)如何在更改外键下拉列表后使“选定”选项有效?

Django Jquery:基于选择,显示更多选择选项

在 Django 中,根据模型中其他字段中选择的值删除选择字段下拉列表中的选项

Django - 发送有关模型更改的电子邮件

如果字段的选择列表发生更改,则停止 Django 创建迁移

如何使用 django 表单/模型来表示字段之间的选择?