Отключить опцию charField в зависимости от другого атрибута (Django) - PullRequest
0 голосов
/ 20 ноября 2018

Итак, у меня есть следующее в моем models.py:

UNITY_CHOICES = (
    ('g', 'Gram(s)'),
    ('kg', 'Kilogram(s)'),
    ('l', 'Liter(s)'),
    ('cl', 'Centiliter(s)'),
)
class Recipe_Ingredient(models.Model):
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE)
    quantity = models.FloatField()
    cost = models.DecimalField(max_digits=20, decimal_places=2)

    quantityUnit = models.CharField(
        max_length=2,
        choices=UNITY_CHOICES,
        default=GRAM,
    )
class Ingredient(models.Model):
    name = models.CharField(max_length=200)
    articleNumber = models.IntegerField(unique=True)
    costPrice = models.DecimalField(max_digits=20, decimal_places=2)
    costAmout = models.FloatField()
    costUnity = models.CharField(
        max_length=2,
        choices=UNITY_CHOICES,
        default=GRAM,
    )

И у меня есть простая форма для добавления этой модели в мою базу данных:

class Recipe_IngredientForm(forms.ModelForm):
    class Meta:
        model = Recipe_Ingredient
        fields = ('quantity', 'quantityUnit', 'ingredient')

Итак, я былинтересно, есть ли способ отфильтровать количество доступных вариантов в зависимости от выбранного ингредиента.Я попытаюсь прояснить это на примере: допустим, я решил добавить Potato, а costUnity для Potato - это «g», тогда я хочу сделать «kg» и «g» единственными вариантами для кол-ваUnit.Это хороший пример?Я могу попытаться придумать что-нибудь получше, если это недостаточно ясно.В любом случае, возможно ли сделать такую ​​вещь?Спасибо.

ОБНОВЛЕНИЕ: forms.py:

class Recipe_IngredientForm(forms.ModelForm):

    class Meta:
        model = Recipe_Ingredient
        fields = ('quantity', 'quantityUnit', 'ingredient')

шаблон:

{% extends 'recipe/base.html' %}

{% block content %}
    <h1>Add Ingredient to Recipe</h1>
    <form method="POST" class="post-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
{% endblock %}

Визуализированный HTML:

<h1>Add Ingredient to Recipe</h1>
<form method="POST" class="post-form"><input type="hidden" name="csrfmiddlewaretoken" value="tXVR3NM1R4TBwOJArWWClL71r8S5C18gWKz9mKK42wlEamf6NcBjzrieF5dQBOaO">
    <p>
        <label for="id_quantity">Quantity:</label>
        <input type="number" name="quantity" required="" id="id_quantity" step="any">
    </p>
    <p>
        <label for="id_quantityUnit">QuantityUnit:</label>
        <select name="quantityUnit" id="id_quantityUnit">
            <option value="g" selected="">Gram(s)</option>
            <option value="kg">Kilogram(s)</option>
            <option value="l">Liter(s)</option>
            <option value="cl">Centiliter(s)</option>
        </select>
    </p>
    <p>
        <label for="id_ingredient">Ingredient:</label> <select name="ingredient" required="" id="id_ingredient">
        <option value="" selected="">---------</option>
        <option value="1">Carrot</option>
        <option value="2">Potato</option>
        <option value="3">Water</option>
        <option value="4">Juice</option>

        </select>
    </p>
    <button type="submit" class="save btn btn-default">Save</button>
</form>
...