python – 一对多内联选择与django管理员

我有一个标准的多对一关系设置。有一堆字段,但是对于我们这里的目的,相关的模型是:

class Class(models.Model):
    name = models.CharField(max_length=128)

class Student(models.Model):
    class = models.ForeignKey(Class)
    name = models.CharField(max_length=128)
    address = models.CharField(max_length=128)
    # ...etc

我创建了一个管理员,它的工作伟大。它甚至自动有能力,我在我编辑学生时设置类。然而,当我去创建/编辑一个类,我得到的是一个输入框的名称。

有没有办法添加一个框/字段,学生可以从类管理页面添加为类的成员?我可以内联一个表单,但这是创建新的学生。我已经有所有的学生创建,我只是寻找一个快速的方法,以添加多个现有的学生到不同的类。

这里是Luke Sneeringer建议的“定制形式”解决方案。无论如何,我很惊讶的缺乏开箱即用的Django解决方案这个(很自然和可能常见的)问题。我缺少什么?

from django import forms
from django.db import models
from django.contrib import admin

class Foo(models.Model):
    pass

class Bar(models.Model):
    foo = models.ForeignKey(Foo)

class FooForm(forms.ModelForm):
    class Meta:
        model = Foo

    bars = forms.ModelMultipleChoiceField(queryset=Bar.objects.all())

    def __init__(self, *args, **kwargs):
        super(FooForm, self).__init__(*args, **kwargs)
        if self.instance:
            self.fields['bars'].initial = self.instance.bar_set.all()

    def save(self, *args, **kwargs):
        # FIXME: 'commit' argument is not handled
        # TODO: Wrap reassignments into transaction
        # NOTE: Previously assigned Foos are silently reset
        instance = super(FooForm, self).save(commit=False)
        self.fields['bars'].initial.update(foo=None)
        self.cleaned_data['bars'].update(foo=instance)
        return instance

class FooAdmin(admin.ModelAdmin):
    form = FooForm
http://stackoverflow.com/questions/6034047/one-to-many-inline-select-with-django-admin

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 一对多内联选择与django管理员