2010-06-15 16 views
10

Mam formularz modelu, którego używam do aktualizacji modelu.Jak mogę zaktualizować tylko niektóre pola w formularzu modelu 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 

Czasami nie potrzebuję aktualizować całego modelu, ale chcę zaktualizować tylko jedno z pól. Więc kiedy POST formularz ma tylko informacje do opisu. Kiedy to robię, model nigdy nie zapisuje, ponieważ myśli, że nazwa jest wygaszona, podczas gdy moim zamiarem jest, aby nazwa się nie zmieniła i po prostu została użyta z modelu.

turtle_form = TurtleForm(request.POST, instance=object) 
    if turtle_form.is_valid(): 
     turtle_form.save() 

Czy jest jakiś sposób, aby to się stało? Dzięki!

Odpowiedz

9

Stosować tylko wymienione pola:

class FirstModelForm(forms.ModelForm): 
    class Meta: 
     model = TheModel 
     fields = ('title',) 
    def clean_title(self.... 

Zobacz http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#controlling-which-fields-are-used-with-fields-and-exclude

Powszechnie stosuje się różne ModelForms dla modelu w różnych widokach, gdy potrzebne są różne funkcje. Tak więc tworzenie innej formy dla modelu, który używa tego samego zachowania (np. clean_<fieldname> metody itp.) Użyj:

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

Dzięki. Zaletą tej metody jest to, że muszę wysłać tylko pełny formularz do wypełnienia szablonu, a następnie mogę wybrać różne formularze w zależności od tego, co napisałem. –

1

Jeśli nie chcesz zaktualizować pola, wyjąć go z formy poprzez Meta exclude krotki:

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

To nie jest dokładnie to, co chcę zrobić. Mam jeden TurtleForm iw jednym miejscu na stronie chcę po prostu mieć opis iw innym miejscu chcę mieć pełną formę. Czy to możliwe, czy muszę podzielić to na dwie różne formy? –

Powiązane problemy