gpt4 book ai didi

python - Django - 如何过滤管理页面表中可编辑列中的外键选择?

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:35 27 4
gpt4 key购买 nike

我的 models.py 中有以下内容:

class Size(models.Model):
size = models.CharField(max_length=20, primary_key=True)

class Book(models.Model):
title = models.CharField(max_length=100, primary_key=True)
size = models.ForeignKey(Size, null=False)

class Pamphlet(models.Model):
title = models.CharField(max_length=100, primary_key=True)
size = models.ForeignKey(Size, null=False)
book = models.ForeignKey(Book, null=True)

最初构建数据库时,会填充尺寸、书籍和小册子表,并且每本书和小册子都与单个尺寸相关联。但是,从 Pamphlet 到 Book 的外键尚未设置。

用户有责任转到管理页面并选择与每本小册子关联的书籍。 Django 的管理功能可以将显示的表中的该列设置为可编辑,并且它足够智能,可以自动生成一个下拉选项,显示书籍表中所有可能的书籍供用户选择。

但是,这个书籍表包含数百种选择,我知道用户只有选择一本与小册子大小相同的书籍才有意义。因此,我想过滤 Django 生成的下拉列表中的选项,只显示与 Pamphlet 大小相同的书籍。

我怎样才能做到这一点?

我看这里:How do I filter ForeignKey choices in a Django ModelForm?但这似乎并不是指 Django 的管理功能。

最佳答案

专门化 get_changelist_form管理员的方法返回自定义表单类。该表单类可以在其 __init__ 方法中设置其 book 字段的 queryset 属性,具体取决于它的 instance 参数收到。例如:

class PamphletChangeListForm(forms.ModelForm):
class Meta:
model = Pamphlet

def __init__(self, *args, **kwargs):
super(PamphletChangeListForm, self).__init__(*args, **kwargs)
instance = kwargs.get('instance')
if instance:
self.fields['book'].queryset = Book.objects.filter(size=instance__size)

关于python - Django - 如何过滤管理页面表中可编辑列中的外键选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21972594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com