2010-09-07 27 views
24

Tôi có một số dòng trong một trong các mô hình quản trị của tôi có các giá trị mặc định có thể sẽ không cần phải thay đổi khi thêm một phiên bản mới bằng "Thêm một ...". Thật không may django sẽ không nhận ra những nội tuyến như các đối tượng mới, trừ khi một số giá trị đã thay đổi. Điều này buộc tôi phải thêm nội tuyến, thay đổi giá trị tùy ý, lưu, thay đổi giá trị trở lại và lưu lại để đạt được hiệu quả mong muốn.Làm thế nào để lực lượng-lưu một "trống"/không thay đổi django admin nội tuyến?

Giải pháp duy nhất tôi đã đưa ra cho đến nay là thêm một trường 'đã thay đổi' ẩn sẽ được điền thông qua java-script khi thêm nội tuyến mới. Như điều này cảm thấy rất hackish tôi hy vọng có một giải pháp thanh lịch hơn.

Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao.

Cảm ơn, Daniel.

Trả lời

45

Tôi mất khá nhiều thời gian để tìm ra nhưng thực sự rất đơn giản.

from django.contrib import admin 
from django.forms.models import BaseInlineFormSet, ModelForm 

class AlwaysChangedModelForm(ModelForm): 
    def has_changed(self): 
     """ Should returns True if data differs from initial. 
     By always returning true even unchanged inlines will get validated and saved.""" 
     return True 

class CheckerInline(admin.StackedInline): 
    """ Base class for checker inlines """ 
    extra = 0 
    form = AlwaysChangedModelForm 
+1

+ 1 Điều này là khá rõ ràng sau khi tất cả. –

+4

Tôi sẽ không nói rõ ràng, nhưng chắc chắn đơn giản và tuyệt vời! –

3

@daniel câu trả lời là rất tốt, tuy nhiên nó sẽ cố gắng để lưu các trường hợp đó đã tạo ra bao giờ, nếu không có thay đổi được thực hiện, đó là không cần thiết, tốt hơn để sử dụng nó như:

class AlwaysChangedModelForm(ModelForm): 
    def has_changed(self, *args, **kwargs): 
     if self.instance.pk is None: 
      return True 
     return super(AlwaysChangedModelForm, self).has_changed(*args, **kwargs) 
Các vấn đề liên quan