Как я могу изменить значение поля модели Django, когда выбран определенный вариант? - PullRequest
2 голосов
/ 24 апреля 2020

Я создал модель на django для сообщений в блоге. Каждое сообщение имеет два варианта статуса: Publi sh или Draft. Как я могу изменить Publi sh на Опубликовано после сохранения сообщения?

Это мой код:

из django .db импорт моделей

из django .contrib.auth.models import Пользователь

Создайте здесь свои модели.

STATUS = ((0, "Черновик"),

(1, "Publi * 1031" * "),)

class Post (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 import *

Зарегистрируйте свои модели здесь

класс 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 Ответ

0 голосов
/ 24 апреля 2020

Ваш первый способ - изменить значение «publi sh» на «опубликовано». Нет никакого смысла иметь дополнительный статус "publi sh". Всякий раз, когда сообщение сохраняется, поле статуса должно измениться на «опубликовано». Если в любом случае вам нужно, чтобы он был там, вы можете добавить еще один объект BooleanField, например "is_published", к своей модели и проверить его в своем методе сохранения, чтобы при каждом значении self.status равном "publi sh", установите поле True. Если вы хотите иметь дополнительные проверки для вашей модели; затем просто напишите функцию для своего класса модели, чтобы изменить значение «is_published».

, чтобы изменить значение поля «is_published» в модели;

в вашем классе Post: добавьте

is_published = models.BooleanField (по умолчанию = False)

, затем переопределите метод сохранения модели:

def save(self, *args, **kwargs):
    if self.status == 1:
        self.is_published = True
    super(Post, self).save(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...