Как установить значение в charfield, которое является значением предыдущего charfield? - PullRequest
0 голосов
/ 06 января 2020

Мне было интересно, можно ли автоматически установить значение другого charfield на основе предыдущего выбора? Я работаю над простым приложением mov ie, и мне нужно изменить цвет значка в html, основываясь на типе mov ie. Я хотел бы автоматизировать это вместо того, чтобы устанавливать коллекторы вручную. Я немного новичок в django. На основе значения «kind» мне нужно установить значение «color».

Мой код:

AGE_CATEGORY = {
    ("0","All"),
    ("6","Kids"),
    ("16","Teenagers"),
    ("21","Adults")
}

MOVIE_CATEGORY = {
    ("H","Horror"),
    ("F","Fantasty"),
    ("ScI","Science-Fiction"),
    ("C","Comedy"),
    ("R","Romance"),
    ("T","Thriller"),
    ("D","Drama"),
}

MOVIE_CATEGORY_COLORS = {
    ("H","danger"),
    ("F","primary"),
    ("ScI","secondary"),
    ("C","warning"),
    ("R","success"),
    ("T","dark"),
    ("D","info"),
}
class Movies(models.Model):
    title = models.CharField(max_length=100)
    age = models.CharField(choices=AGE_CATEGORY, max_length=2)
    kind = models.CharField(choices=MOVIE_CATEGORY, max_length=3)
    color = models.CharField(choices=MOVIE_CATEGORY_COLORS, max_length=1)
    price = models.FloatField()
    date = models.DateField()
    max_seats = models.IntegerField()
    description = models.TextField()

    def __str__(self):
        return self.title

Нашел другое решение :) Просто создал новую функцию в представлениях и сжал 2 списка вместе - модели и цвета. Затем просто повторил их в html и, кажется, работает как положено. Разместив его ниже, возможно, кто-то найдет его полезным.

def show_all_movies(request):
    MOVIE_CATEGORY_COLORS = {
    ("H","danger"),
    ("F","primary"),
    ("ScI","secondary"),
    ("C","warning"),
    ("R","success"),
    ("T","dark"),
    ("D","info"),
}
    color_final = []
    for movie in Movies.objects.all():
        for color in MOVIE_CATEGORY_COLORS:
            if movie.kind in color:
                color_final.append(color[1])

    context = {
        "Movies_Colors": zip(Movies.objects.all(), color_final)

    }
    return render(request, "main_templates/movies.html", context)

1 Ответ

0 голосов
/ 06 января 2020

Как насчет переопределить save() метод с этой функциональностью?

def save(self, *args, **kwargs):
    if self.kind is not None:
        self.color = self.kind
    super(Movies, self).save(*args, **kwargs)

Это должно работать, если ваши клавиши выбора kind и color равны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...