Как я могу обновить только определенные поля в форме модели Django?
У меня есть модель, которую я использую для обновления модели.
class Turtle(models.Model):
name = models.CharField(max_length=50, blank=False)
description = models.TextField(blank=True)
class TurtleForm(forms.ModelForm):
class Meta:
model = Turtle
Иногда мне не нужно обновлять всю модель, но только хочу обновить одно из полей. Поэтому, когда я отправляю сообщение, форма содержит только информацию для описания. Когда я делаю это, модель никогда не спасает, потому что она думает, что имя затушевано, в то время как мое намерение заключается в том, что имя не изменяется и просто используется из модели.
turtle_form = TurtleForm(request.POST, instance=object)
if turtle_form.is_valid():
turtle_form.save()
Есть ли способ сделать это? Спасибо!
Ответы
Ответ 1
Используйте только указанные поля:
class FirstModelForm(forms.ModelForm):
class Meta:
model = TheModel
fields = ('title',)
def clean_title(self....
См. http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#controlling-which-fields-are-used-with-fields-and-exclude
Обычно для модели в разных представлениях используются разные модели ModelForm, когда вам нужны разные функции. Поэтому, создавая еще одну форму для модели, использующей одно и то же поведение (например, методы clean_<fieldname>
и т.д.), Используйте:
class SecondModelForm(FirstModelForm):
class Meta:
model = TheModel
fields = ('title', 'description')
Ответ 2
Если вы не хотите обновлять поле, удалите его из формы через тег Meta exclude
:
class Meta:
exclude = ('title',)