gpt4 book ai didi

Django模型关系

转载 作者:行者123 更新时间:2023-12-02 09:22:37 25 4
gpt4 key购买 nike

我有模型

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

class DriverClass(models.Model):
name = models.CharField(max_length = 20)
event = models.ForeignKey(Event)

class Driver(models.Model):
name = models.CharField(max_length = 50)
event = models.ForeignKey(Event)
driverclass = models.ForeignKey(DriverClass)

事件应该有一定数量的DriverClassDriver选择。现在的问题是 Driver 仅连接到 DriverClassEvent,因此当我选择 DriverClass 对于 django admin 中的驱动程序,我可以从所有 DriverClass 中进行选择。我不确定是否可以在模型中更改某些内容以完成我想要的任务,或者我是否只需更改 DriverModelAdmin 类即可仅显示正确的事件。正确的步骤是什么?

最佳答案

您应该指定一个自定义 ModelForm 来更改驱动程序类字段的查询集并将其添加到您的 ModelAdmin 中:

class DriverForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(DriverForm, self).__init__(*args, **kwargs)
if self.instance.event:
# this form has an event specified in either instance, initial or data
self.fields['driverclass'].queryset = DriverClass.objects.filter(event=self.instance.event)

class DriverAdmin(admin.ModelAdmin):
form = DriverForm

需要注意的是,当您更改Event 时,DriverClass 的选项在您提交表单之前不会更新。该表单将抛出一个 ValidationError,并且返回的表单将具有正确的选择。更改此行为需要 Ajax 请求并通过 Javascript 进行动态更新。

关于Django模型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17767413/

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