使用情况
一张表需要和多张表进行关联时(只和其中一张表进行关联),如果使用ForeingKey将会有多个null的字段,这种情况可使用ContentTypes
models定义
from django.contrib.contenttypes.fields import GenericForeignKeyfrom django.contrib.contenttypes.models import ContentTypefrom django.db import modelsclass Content(models.Model):title = models.CharField(verbose_name='标题', max_length=32)content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)object_id = models.PositiveIntegerField()content_object = GenericForeignKey('content_type', 'object_id')class User(models.Model):name = models.CharField(verbose_name='姓名', max_length=32)class Vip(models.Model):name = models.CharField(verbose_name='姓名', max_length=32)
插入数据
user1 = models.User(name='张三')user1.save()user2 = models.User(name='李四')user2.save()vip1 = models.Vip(name='王五')vip1.save()content1 = models.Content(title='第一个', content_object=user1)content1.save()content2 = models.Content(title='第二个', content_object=user2)content2.save()content3 = models.Content(title='第三个', content_object=vip1)content3.save()
获取数据
content_list = models.Content.objects.all()for c in content_list:print(c.title)print(type(c.content_object))print(c.content_object.name)/*第一个<class 'app01.models.User'>张三第二个<class 'app01.models.User'>李四第三个<class 'app01.models.Vip'>王五*/
