寻找有关设置此模型的建议。
此工作板应用程序包含公司,位置和工作。他们应该有以下关系:
我想创建一个反映这些关系的模型。我觉得这样的事情可能有用:
class Company(models.Model):
name = models.CharField(max_length=200)
description = models.TextField()
class Location(models.Model):
is_primary_location = models.BooleanField()
address = models.CharField(max_length=200)
company = models.ForeignKey(Company)
class Job(models.Model):
title = models.CharField(max_length=200)
company = models.ForeignKey(Company)
location = models.ForeignKey(Location)
但我真的希望强制执行“Job has Location(s)through Company”的关系。该模型不强制执行;我想在显示数据时我必须过滤有效的位置,我想避免这种情况。
非常感谢!
答案 0 :(得分:0)
看看ForeignKey.limit_choices_to。
这允许您过滤可用的选项,并在ModelForm中强制执行。由于您已在工作模型中拥有公司外键,因此您应该可以使用它来过滤选项。
答案 1 :(得分:0)
我最终使用https://github.com/digi604/django-smart-selects并编写了这样的模型。我不认为limit_choices_to在这种情况下有效(根据其他SO线程)
from smart_selects.db_fields import ChainedForeignKey
class Company(models.Model):
name = models.CharField(max_length=200)
description = models.TextField()
class Location(models.Model):
is_primary_location = models.BooleanField()
address = models.CharField(max_length=200)
company = models.ForeignKey(Company)
class Job(models.Model):
title = models.CharField(max_length=200)
company = models.ForeignKey(Company)
location = ChainedForeignKey(
Location,
chained_field="company",
chained_model_field="company",
show_all=False,
auto_choose=True
)