0

寻求有关设置此模型的建议。

这个工作板应用程序有公司、位置和工作。它们应具有以下关系:

  • 一家公司可以有多个地点
  • 一家公司可以有多个职位
  • 一个工作只能有一个公司
  • 一个工作可以有多个位置,但每个位置必须对工作的公司有效

我想创建一个反映这些关系的模型。我认为这样的事情可能会奏效:

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)

但我真的很想强制执行“工作通过公司有位置”的关系。该模型不强制执行它;我想我必须在显示数据时过滤有效的位置,我想避免这种情况。

非常感谢!

4

2 回答 2

1

看看ForeignKey.limit_choices_to

这允许您过滤可用的选项,并在 ModelForm 中强制执行。由于您的 Job 模型中已经有公司外键,您应该能够使用它来过滤选择。

于 2013-10-15T15:48:46.860 回答
0

I ended up using https://github.com/digi604/django-smart-selects and wrote the model like this. I don't think limit_choices_to works in this case (according to other SO threads)

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
    )
于 2013-10-15T16:13:14.500 回答