Как преобразовать CharField в статический текст в Django? - PullRequest
2 голосов
/ 31 октября 2010

Я начал кодировать в Django совсем недавно, так что, возможно, мой вопрос немного странный.Недавно мне нужно было преобразовать поля CharField из модели в простой статический текст в формате html, но я понял, что в данном случае все не так просто, как я мог подумать, или я делаю что-то не так ...

У меня есть эта модель:

class Tag(models.Model):
    CATEGORIES = (
        (0, 'category0'),
        (1, 'category1'), 
        (2, 'category2'), 
        (3, 'category3'), 
        (4, 'category4'), 
        (5, 'category5'))
    name = models.CharField(max_length=20)
    description = models.CharField(max_length=100, blank=True)
    category = models.IntegerField(default=0)
    user = models.ForeignKey(User)

Класс формы для нее:

class TagForm(ModelForm):
    category = ChoiceField(choices=Tag.CATEGORIES)

    class Meta:
        model = Tag

в представлениях Я создаю набор форм с несколькими Tag объектами в одной форме спредоставление TagForm класса для каждого Tag объекта в нем:

TagsFormSet = modelformset_factory(Tag,exclude=('user'),form=TagForm,extra=0)
form = TagsFormSet(queryset=all_tags)

и в шаблоне, который у меня есть:

{{ form.management_form }}   
{% for tagform in form.forms %}
{{ tagform }} 
<hr>
{% endfor %}

Но так в html, "name" иПоля «описание» модели всегда отображаются как поле ввода текста.Я хотел бы, чтобы они были в html как обычный статический текст без чего-либо (в этом html на данный момент мне нужно только отображать их).Есть ли быстрые решения для этого случая?

Ответы [ 4 ]

2 голосов
/ 01 ноября 2010

В метаклассе вашей формы добавьте следующее, чтобы удалить поля

exclude = ('name', 'description'),

, затем отобразите значения в вашем шаблоне с помощью

{{ tagform.instance.name }}
{{ tagform.instance.description }}

Кроме того, аргумент choices должен быть переданв поле модели категории;таким образом вам не нужно будет явно определять поле в форме.

0 голосов
/ 31 октября 2010

Если вы абсолютно хотите визуализировать только текст, вам нужно определить собственный виджет, а затем сопоставить поле формы с этим виджетом. В методе виджета render () выведите только значение поля.

0 голосов
/ 01 ноября 2010

Если вам не нужны поля ввода, почему вы используете формы Django?

Вы также можете просто предоставить список объектов в шаблон и отобразить поля объектов любым удобным вам способом.

0 голосов
/ 31 октября 2010

Может быть достаточно сделать поле доступным только для чтения (поэтому браузер отказывается изменять данные), см. этот вопрос .

...