Поле 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 или нет. Не забудьте перенести свои изменения в модели.

Вернуться на верх