Django как создать динамическое поле
Я не понимаю принцип динамического поля.
В моем случае у меня есть 3 класса в моих моделях: 1- Товар: название, ссылка, описание и наличие (наличие не должно быть закодировано в базе данных и должно определяться динамически. Он должен возвращать информацию о наличии или отсутствии товара на складе). 2- Местонахождение : имя местонахождения. 3- Stock : внешний ключ для Product и внешний ключ для Location и номер продукта(INT).
Идея такова: если на складе есть 1 или более товаров, конечная точка товаров показывает наличие. Если 0, то показывается "нет в наличии".
Возможно ли это вообще? Как?
Спасибо за помощь.
Я думаю, есть несколько вариантов, как это можно реализовать.
Вы можете не сохранять атрибут наличия внутри модели продукта. Вместо этого при выводе нужного шаблона можно использовать фильтр шаблона для проверки наличия товаров на складе, а затем просто показать другое сообщение в HTML-шаблоне.
Может что-то вроде этого:
# product_list.html
{% comment %} Load the custom filters (should be named like the python file below) {% endcomment %}
{% load custom_filters %}
{% for product in products %}
<p>{{ product.name }} {{ product.id|check_availability }}</p>
{% endfor %}
# custom_filters.py
# This file have to be placed inside a folder named 'templatetags' which has to be created inside the root directory of your app
from django import template
register = template.Library()
@register.filter
def check_availability(value)
products_in_stock = Stock.objects.get(product_id=value.id).values('number')
if products_in_stock > 0:
return 'Available'
else:
return 'Out of Stock'
Для дальнейшего объяснения, как реализовать свои собственные шаблонные теги и фильтры, ознакомьтесь с Документацией Django по этому поводу.
Вы также можете использовать Django Signals для проверки после каждого обновления или создания объекта Stock, если количество товара меньше 1, и после этого соответствующим образом обновить поле наличия в модели продукта. Например, если вы создадите поле в виде CharField(), вы можете установить значение продукта внутри сигнала на 'Out of Stock' или 'Available'.
Я думаю, что я бы реализовал это с помощью собственного фильтра шаблонов (как я описал вначале).