2009-12-10 25 views
5

Her olayın bir Seriye ait olduğu iki modeli var, Event ve Series. Çoğu zaman, bir Etkinliğin start_time Serisi 'default_time ile aynıdır.Django Yönetimindeki ana modele göre satır içi satırları önceden doldurma

Modellerin soyulmuş bir sürümü aşağıdadır. Tek seferde bir Series için tüm Olaylar düzenleyebilir ve böylece

#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) 

Ben, yönetici uygulamada inlines kullanın.

Bir seri önceden oluşturulmuşsa, 'default_time Serisi ile her satır içi Olay için start_time'u önceden doldurmak istiyorum. Şimdiye kadar, Etkinlik için bir model yönetici formu oluşturdum ve zaman alanını önceden belirlenmiş bir süre ile önceden doldurmak için initial seçeneğini kullandım.

#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,] 

Buradan nasıl devam edeceğimi bilmiyorum. Kodu genişletmek mümkün mü, start_time alanı için başlangıç ​​değeri 'default_time Serisi mi?

+0

bkz. Http://stackoverflow.com/questions/442040/pre-populate-an-inline-formset –

cevap

0

Sana bir ModelAdmin üzerinde bir işlevi kapatmak gerekir düşünüyorum:

İşte
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 

serisi series örneği olacaktır. Sonra satır içi yönetici sınıfında:

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) 

DÜZENLEME: Eğer alan için varsayılan değer atama kullanabilirsiniz nereye Bu yaklaşım formuna da series nesneyi geçmek sağlayacaktır.

+0

Üzgünüz, cevabı anlamıyorum. Create_foo_form işlevini Django yöneticisine nerede takarım? – Alasdair

+0

Sadece yönetici modülünde modeladmin sınıfınızdan önceki herhangi bir işlevi oluşturun. – shanyu

+0

Cevabım üzerinde ayrıntılı çalışmayı denedim, umarım bu sefer yardımcı olur .. – shanyu