[英]How can I change the value of a Django model field when a particular choice is selected?
我在 django 上為博客文章創建了 model。 每個帖子都有兩種狀態選擇:發布或草稿。 保存帖子后如何將發布更改為已發布?
這是我的代碼:
從 django.db 導入模型
從 django.contrib.auth.models 導入用戶
在此處創建您的模型。
狀態 = ( (0,"草稿"),
(1,"發布"), )
class 柱(型號.型號):
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 導入管理員 from.models 導入 *
class 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)
您的第一種方法是將您的值“發布”更改為“已發布”。 擁有額外的“發布”狀態是沒有意義的。 每當保存帖子時,狀態字段應更改為“已發布”。 如果無論如何你需要它在那里,那么你可以添加另一個 BooleanField 像“is_published”到你的 model 並在你的保存方法中檢查它,所以每當 self.status 等於“發布”時,使該字段為真。 如果您想對您的 model 進行額外檢查; 然后只需為您的 model class 編寫一個 function 來更改“is_published”的值。
因此要更改 model 中“is_published”字段的值;
在您的帖子 class 中:添加
is_published = models.BooleanField(default=False)
然后覆蓋您的 model 保存方法:
def save(self, *args, **kwargs):
if self.status == 1:
self.is_published = True
super(Post, self).save(*args, **kwargs)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.