117👍
If you don’t want to modify blank setting for your fields inside models (doing so will break normal validation in admin site), you can do the following in your Form class:
def __init__(self, *args, **kwargs):
super(CircuitForm, self).__init__(*args, **kwargs)
for key in self.fields:
self.fields[key].required = False
The redefined constructor won’t harm any functionality.
19👍
If the model field has blank=True, then required is set to False on the form field. Otherwise, required=True
Says so here: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/
Looks like you are doing everything right.
You could check the value of self.fields['end'].required
.
- [Django]-How to remove all relations from manytomany?
- [Django]-Django: Set foreign key using integer?
- [Django]-Django debug display all variables of a page
10👍
Expanding on DataGreed’s answer, I created a Mixin that allows you to specify a fields_required
variable on the Meta
class like this:
class MyForm(RequiredFieldsMixin, ModelForm):
class Meta:
model = MyModel
fields = ['field1', 'field2']
fields_required = ['field1']
Here it is:
class RequiredFieldsMixin():
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
fields_required = getattr(self.Meta, 'fields_required', None)
if fields_required:
for key in self.fields:
if key not in fields_required:
self.fields[key].required = False
- [Django]-In a Django QuerySet, how to filter for "not exists" in a many-to-one relationship
- [Django]-Django Footer and header on each page with {% extends }
- [Django]-How to add superuser in Django from fixture
3👍
It’s not an answer, but for anyone else who finds this via Google, one more bit of data: this is happening to me on a Model Form with a DateField. It has required set to False, the model has “null=True, blank=True” and the field in the form shows required=False if I look at it during the clean() method, but it’s still saying I need a valid date format. I’m not using any special widget and I get the “Enter a valid date” message even when I explicitly set input_formats=[‘%Y-%m-%d’, ‘%m/%d/%Y’, ‘%m/%d/%y’, ”] on the form field.
EDIT: Don’t know if it’ll help anyone else, but I solved the problem I was having. Our form has some default text in the field (in this case, the word “to” to indicate the field is the end date; the field is called “end_time”). I was specifically looking for the word “to” in the form’s clean() method (I’d also tried the clean_end_time() method, but it never got called) and setting the value of the clean_data variable to None as suggested in this Django ticket. However, none of that mattered as (I guess) the model’s validation had already puked on the invalid date format of “to” without giving me a chance to intercept it.
- [Django]-Visual Editor for Django Templates?
- [Django]-How to run a celery worker with Django app scalable by AWS Elastic Beanstalk?
- [Django]-Django DateField default options
0👍
This is a bug when using the widgets:
workaround:
Using Django time/date widgets in custom form
or ticket 12303
- [Django]-Django get the static files URL in view
- [Django]-Set up a scheduled job?
- [Django]-How to filter empty or NULL names in a QuerySet?
0👍
From the model field documentation,
If you have a model as shown below,
class Article(models.Model):
headline = models.CharField(
max_length=200,
null=True,
blank=True,
help_text='Use puns liberally',
)
content = models.TextField()
You can change the headline’s form validation to required=True
instead of blank=False
as that of the model as defining the field as shown below.
class ArticleForm(ModelForm):
headline = MyFormField(
max_length=200,
required=False,
help_text='Use puns liberally',
)
class Meta:
model = Article
fields = ['headline', 'content']
So answering the question,
class CircuitForm(ModelForm):
begin = forms.DateTimeField(required=False)
end = forms.DateTimeField(required=False)
class Meta:
model = Circuit
exclude = ('lastPaged',)
this makes begin
and end
to required=False
- [Django]-How to avoid AppConfig.ready() method running twice in Django
- [Django]-How to specify an IP address with Django test client?
- [Django]-Why is assertDictEqual needed if dicts can be compared by `==`?