2010-06-15 38 views
10

Tôi có một mẫu biểu mẫu mà tôi sử dụng để cập nhật một mô hình.Làm cách nào để tôi chỉ cập nhật một số trường nhất định ở dạng mô hình 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 

Đôi khi tôi không cần phải cập nhật toàn bộ mô hình, nhưng chỉ muốn cập nhật một trong các trường. Vì vậy, khi tôi POST biểu mẫu chỉ có thông tin cho mô tả. Khi tôi làm điều đó, mô hình không bao giờ tiết kiệm được vì nó nghĩ rằng cái tên đang bị xóa bỏ trong khi ý định của tôi là tên không thay đổi và chỉ được sử dụng từ mô hình.

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

Có cách nào để thực hiện điều này không? Cảm ơn!

Trả lời

9

lĩnh vực Chỉ sử dụng theo quy định:

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

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

Việc sử dụng các ModelForms khác nhau cho một mô hình ở các chế độ xem khác nhau là rất phổ biến khi bạn cần các tính năng khác nhau. Vì vậy, tạo một biểu mẫu khác cho mô hình sử dụng cùng một hành vi (ví dụ: clean_<fieldname> phương pháp, v.v.) sử dụng:

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

Cảm ơn. Điều tốt đẹp về phương pháp này là tôi chỉ cần gửi biểu mẫu đầy đủ để điền mẫu và sau đó tôi có thể chọn các biểu mẫu khác nhau tùy thuộc vào những gì tôi đã đăng. –

1

Nếu bạn không muốn cập nhật một lĩnh vực, loại bỏ nó từ biểu mẫu qua Meta exclude tuple:

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

Đây không phải là điều tôi muốn làm. Tôi có một TurtleForm duy nhất và tại một điểm trên trang tôi muốn chỉ có mô tả và tại một vị trí khác tôi muốn có hình thức đầy đủ. Điều này có thể xảy ra hoặc tôi có cần chia ra thành hai dạng khác nhau không? –

Các vấn đề liên quan