【问题标题】:Add multiple records at once in django admin panel在 django 管理面板中一次添加多条记录
【发布时间】:2012-02-04 11:08:35
【问题描述】:

我有以下设置。

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 admin 插入多个/批量记录的讨论,我开始怀疑这是否可以使用 django admin 或者我必须从头开始创建这样的表单?无论哪种方式,最好的(最 django-ish)方法是什么?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

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

    查看 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)
    

    【讨论】:

    • 谢谢,已经完成了一半。我仍然需要一种方法来为每个学生设置这样的线路,因此不需要为每个条目选择学生表单下拉列表。在其他世界中,每个 User.objects.all() 都有一行,用户已经设置。
    • 然后执行一些操作,例如覆盖 save 方法以生成所有关系,或使用管理员操作。
    • 几乎是我希望达到的。谢谢,现在我有一些线索可以进一步挖掘。
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2018-07-19
    相关资源
    最近更新 更多