当前位置: 首页 > 面试题库 >

使用Django管理员进行一对多内联选择

吕德惠
2023-03-14
问题内容

我建立了标准的多对一关系。有很多字段,但是出于我们的目的,相关模型为:

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


 类似资料:
  • 问题内容: 好吧,我的设计很简单。 是否有一种简单的方法允许用户在一页上全部创建更新? 我想要的是用户能够转到管理界面,添加新的更新,然后在编辑更新时添加一个或多个帖子,每个帖子都有一个或多个Media项目。另外,我希望用户能够在更新内重新排列帖子。 我当前的尝试在admin.py中包含以下内容: 这使用户可以添加一个新的Post项,选择相关的Update,向其添加Media项,然后单击Save-

  • 问题内容: 我有一个Django应用。当以管理员用户身份登录时,我希望能够在URL中传递一个秘密参数,并使整个网站的行为就像我是另一个用户一样。 假设我有显示当前登录用户个人资料的URL 。我希望能够做类似的事情,并使基础视图相信我实际上是ID 123的用户(因此呈现 该 用户的个人资料)。 我为什么要那样? 仅仅因为重现仅出现在单个用户帐户中的某些错误要容易得多。 我的问题: 实现这样的最简单的

  • 主要内容:启动管理界面Django为管理活动提供随时可以使用的用户界面。 我们都知道,管理界面对于一个Web项目是十分重要的。 Django根据您的项目模型自动生成管理界面。 启动管理界面 管理界面依赖于 django.contrib 模块。若需它工作,需要确保一些模块是否导入在 myproject/settings.py 文件中的INSTALLED_APPS和MIDDLEWARE_CLASSES元组。 对于 INST

  • 问题内容: 我正在尝试获取Django Admin界面来显示有关我的个人资料的信息。它显示我的所有用户,但不显示个人资料信息。我不太确定如何使它正常工作。 我在Google快速搜索后找到了以下代码: 但是,我认为它没有用。当我登录到管理页面时,我看到“用户”,“组”和“站点”。我单击用户,然后看到所有用户的列表,但没有任何个人资料的迹象。单击某个用户会显示有关该用户的信息,但仍然没有个人资料信息。

  • 根据企业需求选择允许/不允许员工修改自己在企业中的名字。 人员管理-人事管理-人员管理-员工个人资料权限管理-编辑-保存。

  • 问题内容: 我有一个按BusinessBranch模型输入的城市外键。我的城市模型还具有州和县模型的州和国家外键。我很难在BusinessBranchInline中显示州和国家/地区下拉菜单。实现这一目标的最佳方法是什么?如果下拉列表根据其父项的值过滤项目,那就太好了。 问题答案: 有了一点黑客,这是相当可行的。 在以下示例中,使用County代替State和Municipality代替City。