Django:ForeignKey字段中的多种可能类型

时间:2015-08-06 05:03:23

标签: sql django django-models

我想建模以下关系,其中车辆所有者字段可以是人员或公司。我们怎么能在Django中做到这一点?

class Person(models.Model):
    name = ...
    other_details = ...

class Company(models.Model):
    name = ...
    other_details = ...

class Vehicle(models.Model):
    owner = models.ForeignKey(x) # 'x' could be a Person or Company

1 个答案:

答案 0 :(得分:2)

使用通用外键 离。

class Vehicle(models.Model):
    content_type = models.ForeignKey(ContentType, null=True, blank=True)
    object_id = models.PositiveIntegerField(null=True, blank=True)
    content_object = generic.GenericForeignKey('content_type', 'object_id')

在保存对象时,您需要获取要为其提供通用FK和该模型的对象ID的模型的content_type。

from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get_for_model(Company)
object_id = company_object.id
ve = Vehicle()
ve.content_type = content_type
ve.object_id = object_id
ve.save()

希望这会对你有所帮助。