2017-10-25 28 views
0

私はDjangoの新機能です...Djangoフォームには有効な値が表示されません

私はモデルを持っています。 2つの外部キーフィールドに注目してください(DeviceProfileモデルは、実際にデータを持っていますが、MISMStateSnapshotない)は:

class MISMWorkflow(models.Model): 
    createdAt = models.DateTimeField(default=timezone.now) 
    currentSnapshot = models.ForeignKey('MISMStateSnapshot', null=True, blank=True, on_delete=models.SET_NULL) 
    device = models.ForeignKey(DeviceProfile, null=True, blank=True, on_delete=models.SET_NULL, related_name='workflows') 

    def get_absolute_url(self): 
     return reverse('{}:workflow_detail'.format(VIEW_NAMESPACE), args=(self.pk,)) 

そしてCreateView

class WorkflowCreateView(generic.CreateView): 
    model = MISMWorkflow 
    fields = '__all__' 
    template_name = 'mism_web/workflow_create_form.html' 

    def form_valid(self, form): 
     form.instance.device = DeviceProfile.objects.get(pk=self.kwargs.get('device_id')) 
     form.instance.createdAt = timezone.now() 
     return super(WorkflowCreateView, self).form_valid(form) 

テンプレート:

{% extends 'mism_web/base.html' %} 
{% load material_form %} 

{% block content %} 
<form action="" method="POST">{% csrf_token %} 
    <!--{{ form.as_p }}--> 
    {% form form=form %}{% endform %} 
    <input type="submit" name="_submit" class="btn" value="Save" /> 
</form> 
{% endblock %} 

のURL:

url(r'^workflow/workflow_create/$', workflow.WorkflowCreateView.as_view(), name='workflow_create_new'), 

これは私がページを作成するために行くとき、私が見たものである。

Screenshot

これで間違って物事のカップルがあります。

  1. は私がのカレンダー/時計ウィジェットが表示されませんDateTimeField(createdAt)をご覧ください。
  2. currentSnapshotまたはdeviceいずれかのフィールドには選択入力(DB内のデバイスがあるにもかかわらず)

私はdjango-materialプラグインを使用していますので、これではありませんありません。私はそれなしでテストし、私はまだ同じ "空の"フォームを取得します。

この原因と修正方法は何ですか?

EDIT:

これは私が `MISMWorkflow」の管理パネルでは何を参照してください、これはまさに私が(OFCを期待フォームの一種であるが、私はここから外部キーエンティティを作成する必要はありません、ちょうどそれらをダウンリストに):

Admin panel

EDIT:問題は、私は基本テンプレートを拡張するときにのみ起こるようです。私がそれを使わなければ、フィールドを正しく見ることができます。例えば、テンプレートはそうのようになります:

<html> 
<body> 
<form action="" method="POST">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" name="_submit" class="btn" value="Save" /> 
</form> 
<body> 
<html> 

そして私は今、ドロップダウンを見ることができます:

enter image description here

ここに私のbase.htmlです:

{% load static %} 
{% load compress %} 

<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 

     <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 
     <link type="text/css" rel="stylesheet" href="{% static 'mism_web/css/materialize.min.css' %}" media="screen,projection"/> 
     <link type="text/css" rel="stylesheet" href="{% static 'mism_web/css/helper.css' %}" media="screen,projection"/> 

     <!--Let browser know website is optimized for mobile--> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 
    </head> 

    <!-- TODO: Fix navbar links --> 
    <body> 
     <div> 
      <nav> 
       <div class="nav-wrapper"> 
        <a href="{% url 'mism_web:index' %}" class="brand-logo">MISM</a> 
        <a href="#" data-activates="mobile" class="button-collapse"> 
         <i class="material-icons">menu</i> 
        </a> 
        <ul class="right hide-on-med-and-down"> 
         <li> 
          <a href="{% url 'mism_web:index' %}"> 
           <i class="material-icons left">home</i> 
           Home 
          </a> 
         </li> 
         <li> 
          <a href="{% url 'mism_web:device_list' %}"> 
           <i class="material-icons left">perm_device_information</i> 
           Devices 
          </a> 
         </li> 
         <li> 
          <a href="{% url 'mism_web:workflow_list' %}"> 
           <i class="material-icons left">format_indent_increase</i> 
           Workflows 
          </a> 
         </li> 
         <li> 
          {% if user.is_authenticated %} 
          <a href="#">{{ user.get_username }}</a> 
          {% else %} 
          <a href="#">Unknown user</a> 
          {% endif %} 
         </li> 
        </ul> 
        <ul class="side-nav" id="mobile"> 
         <li> 
          <a href="{% url 'mism_web:device_list' %}"> 
           <i class="material-icons top">home</i> 
           Home 
          </a> 
         </li> 
         <li> 
          <a href="{% url 'mism_web:device_list' %}"> 
           <i class="material-icons top">perm_device_information</i> 
           Devices 
          </a> 
         </li> 
         <li> 
          <a href="{% url 'mism_web:workflow_list' %}"> 
           <i class="material-icons top">format_indent_increase</i> 
           Workflows 
          </a> 
         </li> 
         <li> 
          {% if user.is_authenticated %} 
          <a href="#">{{ user.get_username }}</a> 
          {% else %} 
          <a href="#">Unknown user</a> 
          {% endif %} 
         </li> 
        </ul> 
       </div> 
      </nav> 
     </div> 

     <div class="container"> 
      {% block content %} {% endblock %} 
     </div> 
     <script type="text/javascript" src="{% static 'mism_web/js/jquery-3.2.1.min.js' %}"></script> 
     <script type="text/javascript" src="{% static 'mism_web/js/materialize.min.js' %}"></script> 
     <script type="text/javascript" src="{% static 'mism_web/js/helper.js' %}"></script> 
    </body> 
</html> 

だから、それはbase.htmlです何らかの形でフォーム表示を妨害します。私はどのように考えている。

+0

が、あなたはそれがJSで適切に初期化されていることを確認してきましたか?また、選択フィールドに値を表示しないために、フォームを開く前に** DeviceProfile **および** MISMStateSnapshot **のオブジェクトを作成しましたか? –

+0

@AjmalNoushad:2番目の質問に関して、DBには 'MISMStateSnapshot'オブジェクトはありませんが、' DeviceProfile'オブジェクトがあります。 2番目の質問に関して、私は何を初期設定するのか理解していません。 – nakiya

答えて

1

私が理解したところから。あなたはのマテリアライズを初期化していないようです。以下の内容でフォームをHTMLファイル内のスクリプトタグを追加する

試してみてください。

$(document).ready(function() { 
    $('select').material_select(); 
}); 

あなたはDatePickerのカレンダーを表示するには、あまりにもDatePickerのプラグインを初期化する必要があるかもしれません。これについて

もっと

は、ここで見つけることができます: カレンダープラグインの http://materializecss.com/forms.html

+0

正しい。これを最終的に見て、かなり長い時間がかかりました。 – nakiya

関連する問題