【问题标题】:Django Crispy Form & <select> tagDjango Crispy Form & <select> 标签
【发布时间】:2021-09-24 08:21:36
【问题描述】:

模板

<select id="food" name="food">
<option value="" selected="selected">---------</option>
{% for object in form.fields.food.choices %}
<option value="{{ object.0 }}" class="{{ object.1 }}">{{ object.2 }}</option>
{% endfor %}
</select>

编辑:添加 Form.py

class MealForm(ModelForm):

    def __init__(self, *args, **kwargs):

        super(MealForm, self).__init__(*args, **kwargs)
        self.fields['food'].choices = [(food.id, food.food_number, food) for food in Food.objects.all()]
        self.fields['drink'].choices = [(drink.id, drink.pid, drink.doi, drink.type) for drink in Drink.objects.all()]



    class Meta:

        fields = (
            'title',
            'description',
            'food',
            'drink',

        )
        model = Meal

【问题讨论】:

    标签: html django django-crispy-forms


    【解决方案1】:

    如果您想传递 id 和值,则可以这样做

    FOOD_OPTIONS = [(food.id, food) for food in Food.objects.all()]
    
    class MealForm(ModelForm):
       class Meta:
          model=Meal
       food = forms.ChoiceField(choices = FOOD_OPTIONS,  widget=forms.TextInput(attrs={'class': "form-control"}))) # here you can specify class to your select tag or remove it
    

    而不是像这样在模板中循环

    {{ form.food|as_crispy_field }}
    

    【讨论】:

    • 如上所述,'as_crispy_field' 在循环中不起作用。 '异常值:|as_crispy_field 传递了一个无效或不存在的字段'
    • 提供您的forms.py
    • 你好@PurpleHeartOfGold 检查我已经编辑了我的答案
    【解决方案2】:

    您可以使用 crispy_field 标记以清晰的表单呈现单个字段

    {% crispy_field form.food %}
    

    as_crispy_field 过滤器

    {{ form.food|as_crispy_field }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-10
      • 2021-12-30
      • 2022-10-12
      • 1970-01-01
      • 2012-07-13
      • 2020-09-17
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多