2010-06-15 3 views
10

У меня есть модель, которую я использую для обновления модели.Как обновить только определенные поля в форме модели 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() 

Есть ли способ сделать это возможным? Благодаря!

ответ

9

Используйте только указанные поля:

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

Обычно для разных моделей используются разные модели ModelForms, когда вам нужны разные функции. Так создавая другую форму для модели, которая использует такое же поведение (скажем clean_<fieldname> методы и т.д.) используют:

class SecondModelForm(FirstModelForm): 
    class Meta: 
     model = TheModel 
     fields = ('title', 'description') 
+0

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

1

Если вы не хотите, чтобы обновить поле, удалить его из формы через Meta exclude кортеж:

class Meta: 
    exclude = ('title',) 
+0

Это не совсем то, что я хочу сделать. У меня есть один TurtleForm, и в одном месте на странице я хочу просто написать описание, а в другом месте хочу иметь полную форму. Возможно ли это, или мне нужно разбить его на две разные формы? –

Смежные вопросы