<p>如果应用程序应与任何模型一起工作,则应使用<a href="https://docs.djangoproject.com/en/1.3/ref/contrib/contenttypes/" rel="nofollow">contentypes framework</a>:</p>
<blockquote>
<p>Django includes a contenttypes application that can track all of the
models installed in your Django-powered project, providing a
high-level, generic interface for working with your models.</p>
</blockquote>
<p>实现这一点允许您的应用程序是通用的-它可以与任何已安装的模型一起工作。你知道吗</p>
<p>编辑:</p>
<p>下面是如何使用内容类型框架(直接从<a href="https://docs.djangoproject.com/en/1.3/ref/contrib/contenttypes/" rel="nofollow">documentation</a>):</p>
<pre><code>from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
class TaggedItem(models.Model):
tag = models.SlugField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
def __unicode__(self):
return self.tag
</code></pre>
<p>现在,要向项目添加标记:</p>
<pre><code>item = Model.object.get(pk=1)
ti = TaggedItem(tag='foo',content_object=item)
ti.save()
</code></pre>
<p>要获取特定项目的标记,请执行以下操作:</p>
<pre><code>i = Image.object.get(pk=1) # or any instance of the Image object, or any object
the_type_of_object = ContentType.objects.get_for_model(i)
# Find all tags for this object
image_tags = TaggedItem.objects.filter(content_type__pk=the_type_of_object.id,
object_id=i.id)
</code></pre>