如何在仅连接部分外部查询集的 Django 中创建 ForeignKey?
How to create ForeignKey in Django that connects only part of foreign Queryset?
我正在为 Kiosk 创建后端,每个 Kiosk 模型都连接了 Location 模型。但是有些地方有标志'disabled'。我正在尝试从 Django Admin -> Kiosk 的下拉菜单中删除此 Locations,以便用户在 creating/updating Kiosk 实例时无法选择它。
我看到了两种可能的解决方法:
- 编辑 Kiosk 的 Django 管理页面,以便在下拉菜单中他只能看到过滤后的结果
- 使用将连接到 Kiosk 的过滤结果创建代理模型
很高兴听到您的建议、批评
我们建议模型如下所示:
class Location(models.Model):
'''Location of Kiosks'''
class Meta:
verbose_name = "Location"
verbose_name_plural = "Locations"
def __str__(self):
return self.name
name = models.CharField('Name', max_length=60)
description = models.TextField('Description')
enabled = models.BooleanField('Location enabled', default=True)
class Kiosk(models.Model):
'''Kiosk unit'''
description = models.TextField('Description')
uuid = models.CharField('Kiosk ID', unique=True, max_length=30)
location = models.ForeignKey(to=Location, on_delete=models.CASCADE)
您可以将 limit_choices_to
传递给您的 ForeignKey
以便它的选择得到过滤
location = models.ForeignKey(
Location,
on_delete=models.CASCADE,
limit_choices_to={'enabled': True},
)
您可以利用limit_choices_to=…
parameter [Django-doc]来限制选项的数量:
class Kiosk(models.Model):
'''Kiosk unit'''
description = models.TextField('Description')
uuid = models.CharField('Kiosk ID', unique=True, max_length=30)
location = models.ForeignKey(
Location,
on_delete=models.CASCADE,
<b>limit_choices_to={'enabled': True}</b>
)
我正在为 Kiosk 创建后端,每个 Kiosk 模型都连接了 Location 模型。但是有些地方有标志'disabled'。我正在尝试从 Django Admin -> Kiosk 的下拉菜单中删除此 Locations,以便用户在 creating/updating Kiosk 实例时无法选择它。
我看到了两种可能的解决方法:
- 编辑 Kiosk 的 Django 管理页面,以便在下拉菜单中他只能看到过滤后的结果
- 使用将连接到 Kiosk 的过滤结果创建代理模型
很高兴听到您的建议、批评
我们建议模型如下所示:
class Location(models.Model):
'''Location of Kiosks'''
class Meta:
verbose_name = "Location"
verbose_name_plural = "Locations"
def __str__(self):
return self.name
name = models.CharField('Name', max_length=60)
description = models.TextField('Description')
enabled = models.BooleanField('Location enabled', default=True)
class Kiosk(models.Model):
'''Kiosk unit'''
description = models.TextField('Description')
uuid = models.CharField('Kiosk ID', unique=True, max_length=30)
location = models.ForeignKey(to=Location, on_delete=models.CASCADE)
您可以将 limit_choices_to
传递给您的 ForeignKey
以便它的选择得到过滤
location = models.ForeignKey(
Location,
on_delete=models.CASCADE,
limit_choices_to={'enabled': True},
)
您可以利用limit_choices_to=…
parameter [Django-doc]来限制选项的数量:
class Kiosk(models.Model):
'''Kiosk unit'''
description = models.TextField('Description')
uuid = models.CharField('Kiosk ID', unique=True, max_length=30)
location = models.ForeignKey(
Location,
on_delete=models.CASCADE,
<b>limit_choices_to={'enabled': True}</b>
)