2012-07-29 86 views
0

我有一个项目,试图重组一些字段,其中一些将可见,其他字段将显示在窗体中,这样我就可以在字段上应用java脚本来扩展。任何人都可以建议我如何在我的modelForm类和模板strcuture中做这样的事情?django模型表单重组字段

models.py

class Page(models.Model): 
    # version control columns 
    version_from = models.DateTimeField(auto_now_add=True, editable=False) 
    version_to = models.DateTimeField(null=True, blank=True, editable=False) 
    # data 
    name = models.CharField(_('Name'), max_length=10, help_text=_('The name of the page will be used as a display name & in navigation menus')) 
    show_in_navigation = models.BooleanField(default=True) 
    slug = models.SlugField(_('Slug'),) 
    subject = models.CharField(_('Subject'), max_length=30,) 
    html_title = models.CharField(_('HTML Title'), max_length=15, blank=True, null=True) 
    keywords = models.CharField(_('HTML Keywords'), max_length=200, blank=True, null=True) 
    content = models.TextField(_('Content'),) 
    parent = models.ForeignKey('self', null=True, blank=True) 
    # audit 
    created_at = models.DateTimeField(auto_now_add=True) 
    created_by = models.ForeignKey(User, editable=False) 

    # objects manager 
    objects = PageManager() 

    class Meta: 
     unique_together = (
      'id', 
      'slug' 
     ) 

forms.py

class PageForm(forms.ModelForm): 
    class Meta: 
     model = Page 

页form.html

<form class="form well" method="POST"> 
     {% csrf_token %} 
      {% if form.errors %} 
      <div class="alert alert-error"> 
       <a class="close" data-dismiss="alert" href="add_blog.html#">&times;</a> 
       <h3>Error</h3> 
       {{ form.non_field_errors }} 
       {% for field in form %} 
         {{ field.errors }} 
       {% endfor %} 
      </div> 
      {%endif%} 

      {% csrf_token %} 

      {# Include the hidden fields #} 
      {% for hidden in form.hidden_fields %} 
       {{ hidden }} 
      {% endfor %} 

      {# Include the visible fields #} 
      {% for field in form.visible_fields %} 

        {{ field.label_tag }} {{ field }} 
        <span class="help-block">{{ field.help_text }}</span> 

      {% endfor %} 
     <br /> 
     <input type="submit" value='{% trans 'Login' %}' class="btn" /> 
    </form> 

我的挑战是,如何才能让该领域一决高下,并呈现关键词在div标签中的html和最后。

下面

例子是什么,我想实现

<form class="form well" method="POST"> 
     {% csrf_token %} 
      {% if form.errors %} 
      <div class="alert alert-error"> 
       <a class="close" data-dismiss="alert" href="add_blog.html#">&times;</a> 
       <h3>Error</h3> 
       {{ form.non_field_errors }} 
       {% for field in form %} 
         {{ field.errors }} 
       {% endfor %} 
      </div> 
      {%endif%} 

      {% csrf_token %} 

      {# Include the hidden fields #} 
      {% for hidden in form.hidden_fields %} 
       {{ hidden }} 
      {% endfor %} 

      {# Include the visible fields #} 
      {% for field in form.visible_fields %} 

        {{ field.label_tag }} {{ field }} 
        <span class="help-block">{{ field.help_text }}</span> 

      {% endfor %} 
      {% for collapsible_field in form.collapsible_fields %} 
      <div class='collapsible'> 
        {{ field.label_tag }} {{ field }} 
        <span class="help-block">{{ field.help_text }}</span>        
      </div> 
      {%endfor%} 
     <br /> 
     <input type="submit" value='{% trans 'Login' %}' class="btn" /> 
    </form> 

上面的例子是为了进一步说明我的观点,但我会去的任何其他方法。请指教?

回答

1

您提出的理想解决方案看起来很好。 就在您的Form类添加这些:

class PageForm(forms.ModelForm): 
    class Meta: 
     model = Page 

    def normal_fields(self): 
     return [field for field in self if not field.is_hidden 
       and field.name in ('field1', 'field2')] 

    def collapsible_fields(self): 
     return [field for field in self if not field.is_hidden 
       and field.name in ('field4', 'field5', 'field3')] 

,然后在模板中只是使用这些方法:

{# Include the visible fields #} 
{% for field in form.normal_fields %} 

     {{ field.label_tag }} {{ field }} 
     <span class="help-block">{{ field.help_text }}</span> 

{% endfor %} 
{% for field in form.collapsible_fields %} 
<div class='collapsible'> 
     {{ field.label_tag }} {{ field }} 
     <span class="help-block">{{ field.help_text }}</span>        
</div> 
{%endfor%} 
+0

非常感谢你 – 2012-07-29 14:18:28