gpt4 book ai didi

django - Django 中复杂的 "limit_choices_to"函数

转载 作者:行者123 更新时间:2023-12-04 17:59:27 26 4
gpt4 key购买 nike

我的 Django 数据库有两个模型:DeviceModel 和 Device。比方说,DeviceModel 对象是“LCD panel”,Device 对象是“LCD panel №547”。所以这两个表具有 ManyToOne 关系。

class DeviceModel(models.Model):
name = models.CharField(max_length=255)

class Device(models.Model):
device_model = models.ForeignKey(DeviceModel)
serial_number = models.CharField(max_length=255)

现在我需要在 DeviceModel 对象之间添加一些关系。例如,“LCD Panel”可以在“Tablet”对象或“Monitor”对象中。另一个对象也可以是独立的,因此它不与其他对象链接。

我决定用 ManyToMany 关系来做到这一点,而不是使用 JSON 序列化或类似的东西(顺便说一句,哪种方法在什么情况下更好??)。

我填写了设备型号之间的所有关系,并且知道我需要向设备表添加关系功能。

为此,我添加了指向“self”的“master_dev”外键字段。它完全按照我的需要工作,但我想限制 django 管理面板中的输出。它应该只显示通过 device_links 连接的设备。当前代码:

class DeviceModel(models.Model):
name = models.CharField(max_length=255)
device_links = models.ManyToManyField('self')

class Device(models.Model):
device_model = models.ForeignKey(DeviceModel)
serial_number = models.CharField(max_length=255)
master_dev = models.ForeignKey('self', blank=True, null=True)

那么,如何限制管理面板中 master_dev 字段的输出呢?有一个函数“limit_choices_to”,但我无法让它工作...

最佳答案

在 forms.py 中:

def master_dev_chioses():
chioses = DeviceModel.objects.filter(do your connection filter here - so not all Devicemodels comes to choicefield)


class DeviceForm(forms.ModelForm):
class Meta:
model = Device

def __init__(self, *args, **kwargs):
super(Device, self).__init__(*args, **kwargs)

self.fields['master_dev'].choices = master_dev_chioses()

关于django - Django 中复杂的 "limit_choices_to"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37301660/

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