首页 > 解决方案 > django ForeignKey 字段只能按类别选择

问题描述

我的模型和Django admin and Django 表单中有一个 ForeignKey 字段,当我显示该字段或在 Django 管理员中时,我得到了该模型中的所有字段但是,我只想在该下拉列表中显示选定的字段,例如

class Area(models.Model):
    area_type_options = (('cc', 'Cost Center'), ('pc', 'Profit Center'),)
    name = models.CharField(max_length=100)
    area_type = models.CharField(max_length=100, choices=area_type_options)


class Item(models.Model):
    name = models.CharField(max_length=150, null=True, unique=True)
    profit_center = models.ForeignKey(Area, null=True, blank=True, on_delete=models.CASCADE, related_name='profit_center')
    cost_center = models.ForeignKey(Area, null=True, blank=True, on_delete=models.CASCADE, related_name='cost_center')

我可以看到 中的所有记录cost_center以及 中的所有记录profit_center但是我只想查看area_typecc 到cost_center哪里以及区域类型 pc 到哪里profit_center

请帮忙

标签: pythondjangodjango-modelsdjango-viewsdjango-forms

解决方案


您可以使用ForeignKey.limit_choices_to[Django docs]来执行此操作:

class Item(models.Model):
    name = models.CharField(max_length=150, null=True, unique=True)
    profit_center = models.ForeignKey(Area, null=True, blank=True, on_delete=models.CASCADE, related_name='profit_center', limit_choices_to={'area_type': 'pc'})
    cost_center = models.ForeignKey(Area, null=True, blank=True, on_delete=models.CASCADE, related_name='cost_center', limit_choices_to={'area_type': 'cc')

推荐阅读