【问题标题】:Django custom ChoiceField form with selected=selected带有 selected=selected 的 Django 自定义 ChoiceField 表单
【发布时间】:2018-04-09 21:18:25
【问题描述】:

我有以下表格:

POSSIBLE_POSITIONS = (
    ('1', 'Brazo'),
    ('2', 'Muñeca'),
    ('3', 'Pierna'),
    ('4', 'Pie'),
)

class PositionForm(forms.Form):
    position = forms.ChoiceField(choices = POSSIBLE_POSITIONS, label="", initial=1, widget=forms.Select(
        attrs={
            'class': 'form-control'
        }
    ))

这是使用该位置的模型:

class User(models.Model):
    id = models.CharField(max_length=10, primary_key=True)
    position = models.CharField(max_length=1, choices=POSSIBLE_POSITIONS, default=1)

这是视图:

def modify(request):
    return render(request, 'interface/modify.html', {'user': User.objects.get(pk=id), 'device_list': Device.objects.all(), 'form': PositionForm()})

我想知道,如何在当前user.position的基础上选择默认的Position

就像我在这里做的那样:

<select name="device_id" class="form-control">
   {% for device in device_list %}
      {% if device.id == user.device.id %}
         <option selected="selected">{{ device.id }}</option>
      {% else %}
         <option>{{ device.id }}</option>
      {% endif %}
   {% endfor %}
   {% if user.device.id == None %}
      <option selected="selected"> Sin dispositivo </option>
   {% else %}
      <option> Sin dispositivo </option>
   {% endif %}
</select>

但我不知道这里怎么做:

<div class="form-group">
   <label>Posición actual dispositivo</label>
   {{ form }}
</div>

【问题讨论】:

  • 如果我理解正确,您只需要执行以下操作
  • 位置可以是1,2,3,4。我需要检查该用户的当前位置,并制作等于 user.position 的表单。你能告诉我代码吗?我不明白那个片段。

标签: html django forms choicefield


【解决方案1】:

如果我正确理解您的问题,您应该在您的视图中进行以下修改:

def modify(request):
    user = User.objects.get(pk=id)
    form = PositionForm(initial={'position': user.position})
    return render(request, 'interface/modify.html', {'user': user, 'device_list': Device.objects.all(), 'form': form})

【讨论】:

    【解决方案2】:

    您可以通过像这样在常规 html 中手动执行该操作来选择任何选项

    <select name="device_id" class="form-control">
                <option value="1"> Brazo</option>
                <option value="2"> Muñeca</option>
                <option value="3" selected> Pierna</option>
                <option value="4"> Pie </option>
                
    </select>

    所以你可以在你的选项标签中添加这个 if 语句

    `<option {% if user.position %} selected {% endif %}>` 
    

    并且选中的将是默认的一个

    【讨论】:

    • 我需要在多个地方添加该表单。这也必须是模型的属性。如果我手动设置,我必须从所有地方手动更改可能性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多