当一个model里面有很多个外键的时候就可以使用contenttypes框架。这个框架可以提供一个接口给所有的model,很方便的将模型关联起来。
有以下的model:
class Post(models.Model):
title=models.CharField(max_length=200)
test=models.TextField()
class Picture(models.Model):
name=models.CharField(max_length=200)
image=models.ImageField()
class Comment(models.Model):
text=modelsTextField()
post=models.ForeignKey(Post)
image=models.ForeignKey(Image)
使用contenttypes代替外键:
class Comment(models.Model):
text=models.TextField()
content_type=models.ForeignKey(Contenttype)
object_id=models.PositiveIntegerField()
content_object=fields.GenericForeignKey()
使用方法:
post=Post.objects.create('title','text')
comment=Comment.objects.create('comment',content_object=post)
将一个model实例传入content_object并且将其他必须的字段填写完成,就可以在model之间建立外键关系了。这样就不用在定义model的时候指定外键关系