2009-12-10 19 views
5

Tôi có hai mô hình, EventSeries, trong đó mỗi Sự kiện thuộc về một Series. Hầu hết thời gian, một sự kiện của start_time của Sự kiện giống với Dòng của nó 'default_time.Inlinesulating inlines dựa trên mô hình phụ huynh trong Admin Django

Đây là phiên bản rút gọn của các kiểu máy.

#models.py 

class Series(models.Model): 
    name = models.CharField(max_length=50) 
    default_time = models.TimeField() 

class Event(models.Model): 
    name = models.CharField(max_length=50) 
    date = models.DateField() 
    start_time = models.TimeField() 
    series = models.ForeignKey(Series) 

Tôi sử dụng dòng chữ trong ứng dụng quản trị để tôi có thể chỉnh sửa tất cả Sự kiện cho một chuỗi cùng một lúc.

Nếu một chuỗi đã được tạo, tôi muốn chuẩn bị trước số start_time cho mỗi Sự kiện nội tuyến với Dòng 'default_time. Cho đến nay, tôi đã tạo một biểu mẫu quản trị viên mô hình cho Sự kiện và sử dụng tùy chọn initial để điền trước trường thời gian với thời gian cố định.

#admin.py 
... 
import datetime 

class OEventInlineAdminForm(forms.ModelForm): 
    start_time = forms.TimeField(initial=datetime.time(18,30,00)) 
    class Meta: 
     model = OEvent 

class EventInline(admin.TabularInline): 
    form = EventInlineAdminForm 
    model = Event 

class SeriesAdmin(admin.ModelAdmin): 
    inlines = [EventInline,] 

Tôi không chắc chắn cách tiếp tục từ đây. Có thể mở rộng mã, sao cho giá trị ban đầu cho trường start_time là Dòng 'default_time?

+0

thấy điều này: http://stackoverflow.com/questions/442040/pre-populate-an-inline-formset –

Trả lời

0

Tôi nghĩ rằng bạn cần phải đóng một hàm trên một ModelAdmin:

def create_event_form(series): 
    class EventForm(forms.ModelForm): 
     def __init__(self, *args, **kwargs): 
      # You can use the outer function's 'series' here 
    return EventForm 

Đây loạt sẽ là series dụ. Sau đó, trong lớp quản trị nội tuyến:

class EventInlineAdmin(admin.TabularInline): 
    model = Event 
    def get_formset(self, request, obj=None, **kwargs): 
     if obj: 
      self.form = create_foo_form(obj) 
     return super(EventInlineAdmin, self).get_formset(request, obj, **kwargs) 

EDIT: Cách tiếp cận này sẽ cho phép bạn để vượt qua đối tượng series vào biểu mẫu mà bạn có thể sử dụng nó để đặt mặc định cho lĩnh vực của bạn.

+0

Xin lỗi, tôi không hiểu câu trả lời. Tôi có thể móc hàm create_foo_form vào quản trị Django ở đâu? – Alasdair

+0

Chỉ cần tạo hàm ở bất kỳ đâu trước lớp modeladmin của bạn trong mô-đun quản trị. – shanyu

+0

Tôi đã cố gắng để xây dựng trên câu trả lời của tôi, hy vọng nó sẽ giúp thời gian này .. – shanyu

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