序幕:
我的模特叫做:
销售员和主管可以销售汽车。主管还控制两个或更多销售人员的工作。
我该怎么做: 我想为这项任务创造最适合的模型。
问题:
问题是主管可以控制销售人员和销售产品。我想创建一个名为'Staff'
的抽象模型,它将是Salesman
和Supervisor
之间的共享字段,Product
将ForeignKey
到Staff
。但我无法将ForeignKey
变为抽象模型
我不想让Product
作为一个表来判断推销员字段或主管字段是否为空。而且我不想使用通用ForeignKey
,因为它很复杂。
我最好的猜测:例如,添加John Smith作为主管和推销员。在这种情况下,约翰史密斯的销售员将约翰史密斯的ForeignKey作为主管。但我认为有最好的解决方案。
最简单但最糟糕的决定。
class Product(models.Model):
company = models.ForeignKey(Company, verbose_name = 'Car company');
price = models.IntegerField()
horse_power = models.IntegerField()
salesman = models.ForeignKey(Salesman, null=True)
supervisor = models.ForeignKey(Supervisor, null=True)
class Meta:
abstract = True
class Car(Product):
number_of_doors = models.IntegerField()
is_conditioner = models.NullBooleanField()
class Supervisor(models.Model):
name = models.CharField(max_length=100)
class Salesman(models.Model):
name = models.ChartField(max_length=100)
supervisor = models.ForeignKey(Supervisor)
我的问题是重写模型结构的最佳方法是什么,以避免两个ForeignKeys,如果其中一个在每种情况下都为NULL并避免ForeignKey
抽象模型。
答案 0 :(得分:1)
我认为一个简单的解决方案是将Supervisor
和Salesman
合并到一个模型中。您可以简单地调用此Staff
并创建一个名为is_supervisor
的字段,以区分主管和常规销售人员。
为此,您可以将模型设置为:
class Product(models.Model):
staff = models.ForeignKey(Staff, null=True)
# other stuff
class Staff(models.Model):
name = models.CharField(max_length=100)
supervisor = models.ForeignKey('self', null=True)
is_supervisor = models.BooleanField()