gpt4 book ai didi

python - Django admin : how do I filter a ForeignKeyField widget based on the object's (not request. 用户的)数据?

转载 作者:行者123 更新时间:2023-11-28 22:03:12 25 4
gpt4 key购买 nike

我有 Chart 和 Module 模型(见下面的代码)。每个图表都属于一个模块(通过 ForeignKey)。图表可能有另一个图表作为其parent(另一个ForeignKey)。我希望在管理员中,特定图表上 parent 的下拉列表仅包含同一模块中的图表

我正在寻找 Python 解决方案,而不是 AJAX。这意味着在创建新图表时,下拉列表必须为空(没有模型实例,则没有选择模块),并且在管理员中更改模块不会更新 parent 选项以匹配,直到模型已保存。我同意。

有很多听起来相似的问题(和答案)最终会根据用户过滤选项; ModelAdmin.formfield_for_foreignkey 将请求作为参数获取,因此您可以使用 request.user,但不会为它提供可使用的模型实例。 (我正在使用 Django 1.3。)

我的模型(当然高度简化):

class Module(models.Model):
pass

class Chart(models.Model):
module = models.ForeignKey(Module)
parent = models.ForeignKey(Chart, blank=True, null=True)

class ChartAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
# I would like to do this, but have no "instance":
kwargs['queryset'] = Chart.objects.filter(module=instance.module)
return super(ChartAdmin, self).formfield_for_foreignkey(self, db_field, request, **kwargs)

admin.site.register(Chart, ChartAdmin)

最佳答案

只需覆盖正在使用的ModelForm:

class ChartAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ChartAdminForm, self).__init__(*args, **kwargs)
if self.instance.module_id:
self.fields['parent'].queryset = self.fields['parent'].queryset.filter(module=self.instance.module)

class ChartAdmin(admin.ModelAdmin):
form = ChartAdminForm
...

关于python - Django admin : how do I filter a ForeignKeyField widget based on the object's (not request. 用户的)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722281/

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