假设有以下型号:

class Person(models.Model):
    name = models.CharField(max_length=50)
    family = models.ForeignKey(
        "Family", related_name="members", on_delete=models.CASCADE
    )

    def __str__(self) -> str:
        return self.name

class Family(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self) -> str:
        return self.name

和以下管理设置:

class PersonAdmin(admin.StackedInline):
    model = Person
    list_display = ("name", "family")

    extra = 0

class FamilyAdmin(admin.ModelAdmin):
    model = Family
    list_display = ("name",)

    inlines = [PersonAdmin]

    extra = 0

admin.site.register(Family, FamilyAdmin)

如何从族编辑页面更改个人的族?

假设我有100属于101.我希望能够从族编辑页面将此人移植到另一个族.

遗憾的是,即使我显式指定PersonAdmin类中的字段,下拉列表也不会显示.

推荐答案

您可以将自定义form添加到PersonAdmin类,并覆盖__init__()方法以动态添加ModelChoiceField以 Select 一个人的新家庭.

试试这个:


from django import forms
from django.contrib import admin

from .models import Family, Person


class PersonForm(forms.ModelForm):
    new_family = forms.ModelChoiceField(
        queryset=Family.objects.all(),
        required=True,
        label="New Family",
    )

    class Meta:
        model = Person
        fields = ["name", "family", "new_family"]


class PersonAdmin(admin.StackedInline):
    model = Person
    list_display = ("name", "family")
    extra = 0
    form = PersonForm  # Here we Added custom form


class FamilyAdmin(admin.ModelAdmin):
    model = Family
    list_display = ("name",)
    inlines = [PersonAdmin]
    extra = 0


admin.site.register(Family, FamilyAdmin)

Python相关问答推荐

跳过包含某些键的字典

从多行文本中提取事件对

Python:MultiIndex Dataframe到类似json的字典列表

在Python中根据id填写年份系列

如果AST请求默认受csref保护,那么在Django中使用@ system_decorator(csref_protect)的目的是什么?

Odoo -无法比较使用@api.depends设置计算字段的日期

如何从FDaGrid实例中删除某些函数?

Pystata:从Python并行运行stata实例

'discord.ext. commanders.cog没有属性监听器'

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

Pandas 有条件轮班操作

使用索引列表列表对列进行切片并获取行方向的向量长度

如何让程序打印新段落上的每一行?

OR—Tools CP SAT条件约束

为一个组的每个子组绘制,

用砂箱开发Web统计分析

Polars asof在下一个可用日期加入

判断solve_ivp中的事件

如何使用OpenGL使球体遵循Python中的八样路径?

剪切间隔以添加特定日期