2015-04-29 12 views
0

我寫我的模式是這樣的:如何顯示django列的字段和幫助文本的水平?

from django.db import models 
from ckeditor.fields import RichTextField 
from django import forms 
from django.contrib import admin 
from ckeditor.widgets import CKEditorWidget 
import datetime 

class Post(models.Model): 
    title = models.CharField(max_length=200,default="no-title") 
    tags = models.CharField(max_length=200,default="blog",help_text="comma separated") 
    summary = models.TextField(max_length=300,default="summary",help_text="Article short introduction") 
    cover = models.ImageField("cover img",upload_to="blog/") 
    last_activity = models.DateTimeField(default=datetime.datetime.now,auto_now=True) 
    keywords = models.CharField(max_length=200,default="no-keyword",help_text="comma separated") 
    content = RichTextField() 

    def __unicode__(self): 
     return self.title 

class PostAdminForm(forms.ModelForm): 
    content = forms.CharField(widget=CKEditorWidget()) 
    fields = ('title','tags') 
    class Meta: 
     model = Post 

class PostAdmin(admin.ModelAdmin): 
    form = PostAdminForm 

    readonly_fields = ('last_activity',) 

admin.site.register(Post, PostAdmin) 

和我的模型顯示在管理頁面是這樣的: enter image description here

你可以看到Tags欄輸入文本和help_text串WEW垂直顯示,這是不是我想要的,我想水平顯示Tags列輸入文本和help_text屬性。

+0

是否提供了我爲你工作的答案?如果是這樣,請評價它。謝謝。 – Cheng

回答

0

標籤需要是關係而不是char字段。

您可以嘗試使用第三方標記實施Django的(例如,https://github.com/alex/django-taggit

+0

感謝您的建議,但目前我不想引入新的Django應用程序,我認爲有一種方法可以水平顯示字段和help_text。 – tolerious

0

這就是你需要做什麼:

1)在你的應用程序目錄下,創建以下文件夾結構和新建一個名爲HTML文件change_form.html(名字是覆蓋默認的文件非常重要)

your_project 
    |-- your_project/ 
    |-- myapp/ 
    |-- templates/ 
      |-- admin/ 
       |-- myapp/ 
       |-- change_form.html <- do not misspell this 

這種結構是由推薦

2)change_form.html裏面,寫這

{% extends "admin/change_form.html" %} 
{% block field_sets %} 
{% for fieldset in adminform %} 
<fieldset class="module aligned {{ fieldset.classes }}"> 
    {% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %} 
    {% if fieldset.description %} 
     <div class="description">{{ fieldset.description|safe }}</div> 
    {% endif %} 
    {% for line in fieldset %} 
     <div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}"> 
      {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %} 
      {% for field in line %} 
       <div{% if not line.fields|length_is:'1' %} class="field-box{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}> 
        {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %} 
        {% if field.is_checkbox %} 
         {{ field.field }}{{ field.label_tag }} 
        {% else %} 
         {{ field.label_tag }} 
         {% if field.is_readonly %} 
          <p>{{ field.contents }}</p> 
         {% else %} 
          {{ field.field }} {{ field.field.help_text|safe }} 
         {% endif %} 
        {% endif %} 
{#     {% if field.field.help_text %}#} 
{#      <p class="help">{{ field.field.help_text|safe }}</p>#} 
{#     {% endif %}#} 
       </div> 
      {% endfor %} 
     </div> 
    {% endfor %} 
</fieldset> 
{% endfor %} 
{% endblock %} 

這似乎是一個大量的代碼,但它的99%是由Django的管理模板,你需要注意的唯一部分複製是在這裏:

{#     {% if field.field.help_text %}#} 
{#      <p class="help">{{ field.field.help_text|safe }}</p>#} 
{#     {% endif %}#} 

我註釋掉這一部分,這是動了你的幫助文本到下一行的部分。我加{{field.field.help_text |安全}}這行的末尾:

{{ field.field }} {{ field.field.help_text|safe }} 

這樣幫助文本將出現在同一線路上的輸入框。

3)這裏是我的settings.py參考模板目錄:

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [BASE_DIR+'/templates/'], # <- note I added BASE_DIR+'/templates/' 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

4)完成!我在Django 1.8測試這一點,所以我的settings.py可能會有所不同,從你的


我要總結如何重寫管理網站在通用模板:

1)發現Django管理模板文件在您的硬盤驅動器上,並找到您需要更改的模板。對於我來說,我用我的機器上的虛擬ENV,這是我找到的模板文件:

/Users/cheng/.virtualenvs/edge/lib/python2.7/site-packages/django/contrib/admin/templates/admin 

/lib中/部分之前的路徑將是你機器上的不同。

2)找到您想要更改的模板文件並記住該HTML文件的名稱。

3)打開HTML文件並找到要覆蓋的{%block%}。對於這個特殊的問題,HTML文件change_form.html和塊的名字是{%塊field_sets%}

4)創建在步驟2中標識的名稱相同的HTML文件,並把它放在你的項目的模板目錄。

5)擴展原始HTML並修改上面顯示的{%block%}。