Django - добавить опцию виджета в мета-класс form.py? - PullRequest
0 голосов
/ 21 мая 2018

models.py

from django.db import models

class user(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    email = models.EmailField(max_length=100, unique=True)

forms.py

from django import forms
from second_app.models import user

class NewUserForm(forms.ModelForm):

    class Meta:
        model = user
        fields = '__all__'

В нормальном forms.py, который не наследуется от моделей, вы можете использовать field = forms.CharField(widget=forms.HiddenInput) для указаниякак поле ввода будет отображаться пользователям.Как это можно сделать, когда мой forms.py наследует класс, определенный в models.py?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы можете изменить виджет в виде __init__ метод:

def __init__(self, *args, **kwargs):
    super(NewUserForm, self).__init__(*args, *kwargs)
    self.fields['fieldname'].widget = forms.HiddenInput()

Вы можете изменить что-либо о поле .. например.требуемый, выбор и многое другое, что вы можете решить по-разному во время отображения формы.Вы также можете удалить поля из формы здесь, или добавить поля, которые вы можете включить только условно .. например ::

del self.fields['fieldname']
if some_condition:
    field['new_fieldname'] = forms.CharField()
0 голосов
/ 21 мая 2018

Вы можете использовать для этой мета widgets опция:

from django import forms
from second_app.models import user

class NewUserForm(forms.ModelForm):

    class Meta:
        model = user
        fields = '__all__'
        widgets = {
            'field_name': forms.HiddenInput(),
        }
...