В формах Django Python, как я могу дать полю формы «второе имя»? - PullRequest
0 голосов
/ 09 января 2019

У меня есть форма на моем сайте. Форма создается с помощью цикла Python, который вызывает поля по имени переменной. Вот HTML-код:

{% csrf_token %}
  {% for form_field in task_form %}
    <div class="wrap-input2 validate-input" data-validate="Name is required">
      <input class="input2" type="text" name="{{ form_field.name }}">
      <span class="focus-input2" data-placeholder="{{ form_field.name }}"></span>
    </div>
  {% endfor %}

Переменная {{form_field.name}} отображается на веб-сайте для каждого поля, но это грубая версия того, что я хотел бы отобразить. Вот как поля создаются в коде Python:

class Task(models.Model):
  name = models.CharField(max_length=200,default = 'Untitled task ',blank=True,)
  description = models.TextField(null=True,blank=True)
  cost = models.DecimalField(max_digits=19,decimal_places=2,null=True,blank=True,default=0)
  profit = models.DecimalField(max_digits=19,decimal_places=2,null=True,blank=True,default=0)
  start_date = models.DateField(null=True,blank=True)
  end_date = models.DateField(null=True,blank=True)
  hours_to_finish = models.IntegerField(null=True,blank=True,default=0)
  hours_finished = models.IntegerField(null=True,blank=True,default=0)
  project= models.ForeignKey(Project,on_delete=models.CASCADE)
  parent_task = models.ForeignKey('self', on_delete= models.SET_NULL ,null=True,blank = True)
  def __str__(self):
    return self.name

есть ли способ, которым я мог бы вызвать поле формы с его именем, но иметь привязанную к каждому полю отдельную переменную для отображения на сайте, например {{form_field.nickname}}

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Вы ищете атрибут Field.label.

Если вы создаете Form из модели, атрибут verbose_name поля модели используется в качестве метки для поля формы (как описано в документах формы модели ).

class Task(models.Model):
    ...
    start_date = models.DateField(null=True,blank=True, verbose_name="Date started")
    ...


{% csrf_token %}
  {% for form_field in task_form %}
    <div class="wrap-input2 validate-input" data-validate="Name is required">
      <input class="input2" type="text" name="{{ form_field.name }}">
      <span class="focus-input2" data-placeholder="{{ form_field.verbose_name }}"></span>
    </div>
  {% endfor %}

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

Обратите внимание, что есть также help_text, который можно использовать для объяснения поля.

0 голосов
/ 11 января 2019

Я оставил models.py в покое, но в forms.py я добавил это в мета-класс каждой формы:

fields = ('name', 'description', 'cost', 'profit', 'start_date', 'end_date', 'hours_to_finish', 'hours_finished', 'project', 'parent_task')
    labels = {
        'name': ('Task Name'),
        'description': ('Description'),
        'cost': ('Cost'),
        'profit': ('Profit'),
        'start_date': ('Start Date'),
        'end_date': ('End Date'),
        'hours_to_finish': ('Hours Remaining'),
        'hours_finished': ('Hours Completed'),
        'project': ('Parent Project'),
        'parent_task': ('Parent Task'),
    }

просто сделайте так, чтобы имена полей применялись к вашей форме, и имена в скобках будут отображаться с использованием {{form_field.label}} вместо {{form_field.name}}

Я назвал это в HTML так:

{% csrf_token %}
        {% for form_field in task_form %}
        <div class="wrap-input2 validate-input" data-validate="Name is required">
          <input class="input2" type="text" name="{{ form_field.name }}">
          <span class="focus-input2" data-placeholder="{{ form_field.label }}"></span>
        </div>
        {% endfor %}

Убедитесь, что все поля, которые вы хотите переименовать, в массив 'fields'.

0 голосов
/ 09 января 2019

Вы можете получить доступ к словарю fields в своей форме, поэтому используйте поля:

<div class="wrap-input2 validate-input" data-validate="Name is required">
  <input class="input2" type="text" name="{{ form.fields.project.name }}">
  <span class="focus-input2" data-placeholder="{{ form.fields.project.name }}"></span>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...