2012-02-04 52 views
2

我有以下設置。在django管理面板中一次添加多條記錄

from django.db import models 
from django.contrib.auth.models import User 

class Event(models.Model): 
    name = models.CharField(max_length=64) 
    date = models.DateField() 

ATTENDANCE_CHOICES = (
    ('A','Attending'), 
    ('N','Absent'), 
    ('L','Taken ill'), 
) 

class Attendance(models.Model): 
    student = models.ForeignKey(User) 
    event = models.ForeignKey(Event) 
    status = models.CharField(max_length=1, choices=ATTENDANCE_CHOICES) 

簡而言之:學生(用戶)參加或不參加課程(活動),這是由出勤登記。 問題是一次添加一個考勤記錄。

我正在尋找的是一種爲每個班級(每個Event對象)提供表單的方法,其中包括所有學生和出勤狀態單選按鈕或其旁邊的下拉列表。

事情是這樣的:

http://i.imgur.com/jANIZ.png

我已經看過有關多/批量記錄插入通過Django管理許多討論和我開始懷疑這是甚至與Django管理可能還是我必須創建這種形式從頭開始?無論哪種方式,最好的(最Django-ish)方法是什麼?

回答

3

「這甚至可能嗎?」開箱即可。

查看django Admin應用程序,Inline,ModelForms和RadioSelect小部件。

class MyForm(forms.ModelForm): 
    class Meta: 
     model = Attendance 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs 
     self.fields['status'].widget = forms.RadioSelect(choices=self.fields['status'].choices) 

class AttendanceInline(admin.TabularInline): 
    model = Attendance 
    form = MyForm 

class EventAdmin(admin.ModelAdmin): 
    inlines = [AttendanceInline] 

    def save_model(self, request, obj, form, change): 
     obj.save() 
     for user in User.objects.all(): 
      obj.attendance_set.create(user=user, status='') 
      # you should consider a null field or a possible choice for "Undecided" 

admin.site.register(Event, EventAdmin) 
+0

謝謝,這將是它的一半。我仍然需要爲每個學生設置這樣的線路,因此不需要爲每個條目選擇學生表單下拉列表。 在其他世界中,每個User.objects.all()用戶已設置一行。 – liepumartins 2012-02-04 14:59:02

+0

然後執行諸如覆蓋保存方法來生成所有關係或使用管理操作。 – 2012-02-04 19:16:19

+0

幾乎是我希望實現的。謝謝,現在我有一些線索要進一步挖掘。 – liepumartins 2012-02-04 21:35:05