在我的应用程序中,项目归所有者所有,所有者可以是一个或多个人或公司,但不能同时是两者。 个人和公司是两种不同的模式。 我还想使用通过模型获得所有权来关联一些重要信息,例如所有权日期、处置日期等。
你如何在 Django 中建模? 我正在使用 Postgres 9.1
是使用支持"泛型"的内置django.contrib.contenttype
应用程序,即可能指向多个模型之一的外键。它非常强大,因为它提供了内联表单等表单元素。
以下是有关泛型的一些资源:
https://docs.djangoproject.com/en/1.9/ref/contrib/contenttypes/#generic-relations-in-adminhttp://screamingatmyscreen.com/2012/6/django-and-generic-relations/
我在自己的项目中使用 django-polymorphic 取得了很大的成功,而且它非常易于使用。
从版本 0.9.2 开始,您可以实现这样的多态模型(直接取自文档):
from polymorphic.models import PolymorphicModel
class Project(PolymorphicModel):
topic = models.CharField(max_length=30)
class ArtProject(Project):
artist = models.CharField(max_length=30)
class ResearchProject(Project):
supervisor = models.CharField(max_length=30)
创建模型:
>>> Project.objects.create(topic="Department Party")
>>> ArtProject.objects.create(topic="Painting with Tim", artist="T. Turner")
>>> ResearchProject.objects.create(topic="Swallow Aerodynamics", supervisor="Dr. Winter")
获取多态查询结果:
>>> Project.objects.all()
[ <Project: id 1, topic "Department Party">,
<ArtProject: id 2, topic "Painting with Tim", artist "T. Turner">,
<ResearchProject: id 3, topic "Swallow Aerodynamics", supervisor "Dr. Winter"> ]
因此,在您的情况下,您可以设置如下模型:
class Owner(PolymorphicModel):
date_of_ownership = ...
date_of_disposal = ...
class Person(Owner):
pass
class Company(Owner):
pass
class Item(models.Model):
owner = ForeignKey(Owner)