在django管理面板中一次添加多条记录

时间:2012-02-04 11:08:36

标签: django django-admin

我有以下设置。

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)

简而言之:学生(用户)参加或不参加课程(活动),这是由出勤登记。 问题是一次添加一个出勤记录。

我正在寻找的是一种为每个班级(每个活动对象)提供表格的方式,其中列出了所有学生和出勤状态单选按钮或旁边的下拉列表。

这样的事情:

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

我看过很多关于通过django admin插入多个/批量记录的讨论,我开始怀疑这是否可能与django admin或我是否必须从头开始创建这样的表单?无论哪种方式,什么是最好的(大多数django-ish)方法?

1 个答案:

答案 0 :(得分:3)

“这有可能吗?”它可以开箱即用。

查看django Admin应用程序,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)