在我的应用程序中,项目由所有者拥有,其中所有者可以是一个或多个人或公司,但不能同时拥有。人和公司是两种不同的模型。我还希望通过模型使用所有权来关联一些重要信息,如所有权日期,处置日期等。
你如何在Django中建模?我正在使用Postgres 9.1
答案 0 :(得分:0)
这样做的一种方法是使用支持“Generics”的内置django.contrib.contenttype
应用,即可能指向多个模型之一的外键。它非常强大,因为它提供了内联表单等表单元素。
以下是有关泛型的一些资源:
https://docs.djangoproject.com/en/1.9/ref/contrib/contenttypes/#generic-relations-in-admin http://screamingatmyscreen.com/2012/6/django-and-generic-relations/
答案 1 :(得分:0)
我在自己的项目中使用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)