我想建模以下关系,其中车辆所有者字段可以是人员或公司。我们怎么能在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
答案 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()
希望这会对你有所帮助。