Что делает Джанго
Атрибут «Пустое» поля модели Django, и способ его отрицания и превращения в атрибут «требуется» поля формы при создании ModelForm, довольно крутой. Это позволяет мне установить свойство для модели, к которой оно принадлежит, но иметь атрибут «required», доступный при обработке ModelForm, созданной из него. Наличие «требуемого» при рендеринге в шаблоне означает, что я могу делать классные вещи, такие как добавление звездочки к отображаемым меткам обязательных полей.
Модель
class Employee(models.Model):
name = models.CharField(blank=False)
public_bio = models.TextField(blank=False)
salary= models.DecimalField(max_digits=15, decimal_places=2, blank=False)
personnel_notes = models.TextField(blank=True)
Шаблон (с использованием ModelForm)
{% for field in form %}
<p>
{{ field.label }}{% if field.required %}*{% endif %}
{{ field }}
</p>
{% endfor %}
Что я хочу сделать
Но что, если я захочу сделать это со своим новым атрибутом? Его не нужно отменять / переводить так, как это делает пробел -> required, но я хочу, чтобы мой новый атрибут, определенный в поле модели, был доступен в моих полях формы. Например, допустим, я хочу указать пользователю, какие поля могут быть опубликованы:
Модель
class Employee(models.Model):
name = models.CharField(blank=False, publishable=True)
public_bio = models.TextField(blank=False, publishable=True)
salary= models.DecimalField(max_digits=15, decimal_places=2, blank=False, publishable=False)
personnel_notes = models.TextField(blank=True, publishable=False)
Шаблон (с использованием ModelForm)
{% for field in form %}
<p>
{{ field.label }}{% if field.required %}*{% endif %}
{% if field.publishable %}(may be published){% endif %}
{{ field }}
</p>
{% endfor %}
Есть ли способ сделать это? Пытаясь это, я сразу же сталкиваюсь с проблемой определения модели, где django.db.models.fields.Field.__init__()
даже не принимает kwargs. Если это невозможно, какие-либо идеи для обхода, чтобы получить желаемое поведение?