2012-02-04 8 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) 

:学生(ユーザー)に出席またはクラス(イベント)出席していない、これは、出席者によって登録されています。 問題は、一度に1つずつ出席記録を追加することです。

私が探しているのは、各クラス(各イベントオブジェクト)のフォームに、すべての生徒と出席状況のラジオボタンまたはドロップダウンのリストを提供する方法です。

このような何か:

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

私はDjangoの管理者を経由してバルク/複数のレコードの挿入について多くの議論を見ていると思うし始めていさえ可能これでDjangoの管理者または私が作成する必要があります最初からこのようなフォーム?いずれにしても、最高の(ジャンゴ・アイズ)アプローチは何でしょうか?

答えて

3

"これも可能ですか?"それはすぐに可能です。

django管理アプリケーション、Inlines、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

+0

次に、すべてのリレーションシップを生成するためにsaveメソッドをオーバーライドするか、管理アクションを使用するかのようにします。 –

+0

ほぼ達成したいと思っていたもの。ありがとう、今私はいくつかのリードをさらに掘るために持っている。 – liepumartins

関連する問題