<p>当我遇到这样的情况,我不得不为不同的模型制作外键时,我选择使用<code>GenericForeignKey</code>您可以在这里查看官方文档:<a href="https://docs.djangoproject.com/en/1.8/ref/contrib/contenttypes/#generic-relations" rel="noreferrer">Django ContentTypes: Generic Relations</a></p>
<p>文档很好地解释了如何使用它:</p>
<pre><code>from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class TaggedItem(models.Model):
tag = models.SlugField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
def __str__(self): # __unicode__ on Python 2
return self.tag
</code></pre>
<ul>
<li><p>字段<strong>content\u type</strong>存储泛型外键指向的模型</p></li>
<li><p>字段<strong>对象id</strong>存储外键的id,</p></li>
<li>字段<strong>content_object</strong>帮助您根据其他两个字段直接访问相关对象</li>
</ul>
<p>这不是最好的解决方案,但它在一些项目中拯救了我</p>
<p>使用示例:</p>
<pre><code>from django.contrib.auth.models import User
guido = User.objects.get(username='Guido')
t = TaggedItem(content_object=guido, tag='bdfl')
t.save()
t.content_object
<User: Guido>
</code></pre>