V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fanne
V2EX  ›  Django

django form ModelChoiceField 问题请教

  •  
  •   fanne · 2017-03-24 11:50:12 +08:00 · 4834 次点击
    这是一个创建于 2825 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要做一个 select 的表单,想直接用 django 的 form 功能,这样就省去了一些自己写验证等一些乱七八糟功能。

    现在在 form.py 内容如下

    class LogSearchForm(forms.Form):
        # platformId = forms.IntegerField(label='所属平台')
        platformId = forms.ModelChoiceField(label='所属平台',queryset=plat_info.objects.all(),to_field_name='plat_id',empty_label='选择平台')
        # gameOuterIp = forms.GenericIPAddressField(label="游戏服")
        gameOuterIp = forms.ModelChoiceField(label='游戏服',queryset=eva_game_list.objects.values('gameOuterIp'),empty_label='选择游戏服')
        # dbInnerIp = forms.ModelChoiceField(label='DB',queryset=abc_game_list.objects.values_list('dbInnerIp'),empty_label='选择 db')
        dbInnerIp = forms.ModelChoiceField(label='DB', queryset=abc_game_list.objects.values('dbInnerIp'),empty_label='选择 db')
    

    其中调用到的 models.py 中的 abc_game_list

    class abc_game_list(models.Model):
        platformId = models.IntegerField(u"平台 ID")
        serverId = models.IntegerField(u"游戏服 ID",primary_key=True,unique=True)
        gameOuterIp = models.GenericIPAddressField(u"游戏服外网 IP")
        dbInnerIp = models.CharField(u"数据库内网 IP",max_length=50)
        group = models.CharField(u'所属组',max_length=100,default='')
        notes = models.CharField(u"备注",max_length=100,default=u'备注信息')
    

    前端 html 内容

    <div class="col-lg-12">
      <form class="form-line" method="post" action="/items/search_log/">
        {{ log_form }}
      </form>
    </div>
    

    最后显示成这样 直接源码查看

    <option value="" selected="selected">选择游戏服</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.221&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.221&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.206&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.206&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.128&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.128&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.58&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.1058&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.151&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.151&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.221&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.221&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.206&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.206&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.221&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.221&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.206&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.206&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.128&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.128&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.58&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.1058&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.151&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.151&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.221&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.221&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.206&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.206&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.128&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.128&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.58&#39;}">{&#39;gameOuterIp&#39;: u&#39;1192.168.1058&#39;}</option>
    <option value="{&#39;gameOuterIp&#39;: u&#39;192.168.10.151&#39;}">{&#39;gameOuterIp&#39;: u&#39;192.168.10.151&#39;}</option>
    </select></td></tr>
    

    这里可以看出, option value 和页面显示的值都是不对的。

    如果不用 form 功能,自己直接写 html , html 内容

    <div class="form-group col-sm-2">
      <label for="exampleInputEmail2">游戏服</label>
    
            <select id="id_select" class="form-control selectpicker" name="gameOuterIp" data-live-search="true">
              <option value ="">选择游戏服</option>
              {% for game in gamelists %}
              <option value ="{{ game.gameOuterIp }}">{{game.group}}&nbsp &nbsps{{ game.serverId }}服</option>
              {% endfor %}
            </select>
    </div>
    

    源码查看

    会如下显示

    <div class="form-group col-sm-2">
       <label for="exampleInputEmail2">游戏服</label>
    
      <select id="id_select" class="form-control selectpicker" name="gameOuterIp" data-live-search="true">
        <option value ="">选择游戏服</option>
        
        <option value ="192.168.10.221">abc-IOS&nbsp &nbsps1 服</option>
                        192.168.10      abc
        <option value ="192.168.10.206">abc-IOS&nbsp &nbsps2 服</option>
                        192.168.10      abc
        <option value ="192.168.10.128">abc-IOS&nbsp &nbsps3 服</option>
                        192.168.10      abc
        <option value ="192.168.10.58">abc-IOS&nbsp &nbsps4 服</option>
                        192.168.10      abc
        <option value ="192.168.10.151">abc-IOS&nbsp &nbsps5 服</option>
                        192.168.10      abc
        <option value ="192.168.10.221">abc-IOS&nbsp &nbsps6 服</option>
                        192.168.10      abc
        <option value ="192.168.10.206">abc-IOS&nbsp &nbsps7 服</option>
                        192.168.10      abc
        <option value ="192.168.10.221">abc-IOS&nbsp &nbsps8 服</option>
                        192.168.10      abc
        <option value ="192.168.10.206">abc-IOS&nbsp &nbsps9 服</option>
                        192.168.10      abc
        <option value ="192.168.10.128">abc-IOS&nbsp &nbsps10 服</option>
                        192.168.10      abc
        <option value ="192.168.10.58">abc-IOS&nbsp &nbsps11 服</option>
                        192.168.10      abc
        <option value ="192.168.10.151">abc-IOS&nbsp &nbsps12 服</option>
                        192.168.10      abc
        <option value ="192.168.10.221">abc-IOS&nbsp &nbsps13 服</option>
                        192.168.10      abc
        <option value ="192.168.10.206">abc-IOS&nbsp &nbsps14 服</option>
        
        <option value ="192.168.10.128">abc-IOS&nbsp &nbsps15 服</option>
        
        <option value ="192.168.10.58">abc-IOS&nbsp &nbsps16 服</option>
        
        <option value ="192.168.10.151">abc-IOS&nbsp &nbsps17 服</option>
        
      </select>
     </div>
    

    那么,我想要用 form.ModelChoiceField 来完成正常 select 功能,要如何处理?

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5759 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:50 · PVG 09:50 · LAX 17:50 · JFK 20:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.