今天在学习django0.95的时候遇到这样一个问题,我在一个model里面定义了两个foreignkey,都指向同一个model,结果在syncdb的时候老是报错,要我指定related_name,查到django.com上一篇文章Relating a model to another model more than once

举例说明,我定义一个model名叫Tag,

class TaggedItem(models.Model):
“”"A tag on an item.”"”
tag = models.SlugField()
content_type = models.ForeignKey(ContentType, related_name=’content’)
object_id = models.PositiveIntegerField()
content_object = models.GenericForeignKey()
owner = models.SlugField()
owner_type = models.ForeignKey(ContentType, related_name=’owner’)
owner_id = models.PositiveIntegerField()
owner_object = models.GenericForeignKey(’owner_type’, ‘owner_id’)

定义一个简单的model来测试:

class Mineral(models.Model):
name = models.CharField(maxlength=150)
hardness = models.PositiveSmallIntegerField()

m1 = Mineral(name=’m1′, hardness=1)

m1.save()

m2 = Mineral(name=’m2′, hardness=2)

m2.save()

t1 = TaggedItem(tag=’t1′, content_object=m1, owner_object=m2)

t1.save()

ct = ContentType.objects.get(name=’mineral’)

ct.owner.all()的结果是 [<TaggedItem: t1>]

ct.content.all()的结果就是[<TaggedItem: t1>]

通过related_name我们可以找到是TaggedItem的哪个具体字段指向ContentType。


posted on 2011-04-18 19:45  菜鸟初长成  阅读(593)  评论(0编辑  收藏  举报