Поле Django не должно отображаться в форме, а добавляться промежуточным ПО при POST-запросе
Допустим, у меня есть следующая модель:
from django.db import models
class MyModel(models.Model):
foo = models.CharField()
bar = models.CharField()
Поле "foo" не должно отображаться в форме создания. Поэтому форма имеет вид:
from django.forms import ModelForm
class MyForm(ModelForm):
fields = ('bar',)
Поле НЕ отображается в форме. Отлично!
Теперь при ПОСТе формы промежуточное ПО добавляет поле 'foo' в POST vars. Но при сохранении я получаю ошибку "NOT NULL constraint failed: foo". Похоже, есть какой-то магический код, выравнивающий параметры POST (с "foo") с полями формы (без "foo")
Я уже играл с параметром "editable=False", но безрезультатно, то же поведение.
Есть идеи, как решить эту проблему?
Думаю, вам нужно добавить класс Meta
в Modelform
models.py
from django.db import models
class MyModel(models.Model):
foo = models.CharField(max_length=120)
bar = models.CharField(max_length=120)
form.py
from django.forms import ModelForm
class MyForm(ModelForm):
class Meta:
model = MyModel
fields = ('bar',)
Вы не указали, может ли поле foo
быть null
или нет.
Я полагаю, именно поэтому он не может создать объект MyModel
, поскольку ему нужно значение foo
. Попробуйте добавить null=True
к вашему foo
полю.
Примечание: в зависимости от того, что вы хотите, вы должны посмотреть, нужно ли blank=True
или нет. Не забудьте перенести свои изменения в модели.