django ContentType使用实例

最近在学习补卡、报销等需要审批的oa工作流。也是经过几番周转,才看到ContentType能完成通用外键。因为网上资料太多,自己记录一遍,以后回顾复习很方便、有印象。

参考了这篇文章,写得很好,参考连接,配合下列实例,有更直观的感受

# models.py
from django.contrib.auth.models import User
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
from django.db import models

class Audit(models.Model):
  content_type = models.ForeignKey(ContentType, on_delete=models.DO_NOTHING)
  object_id = models.PositiveIntegerField()
  content_object = GenericForeignKey('content_type', 'object_id')
  audit_datetime = models.DateTimeField(verbose_name='审核时间')
  user = models.ForeignKey(User, on_delete=models.DO_NOTHING)

#补卡模型
class Supplement(models.Model):
  am_or_pm = models.CharField(verbose_name='补卡班次', max_length=10)
  audit = GenericRelation(to='Audit')

#日报模型
class Daily(models.Model):
  detail = models.TextField(verbose_name='说明')
  audit = GenericRelation(to='Audit')
# admin.py
from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline
from .models import *

class AuditInlineAdmin(GenericTabularInline):
  model = Audit
  extra = 0

class DailyAdmiin(admin.ModelAdmin):
  inline = [AuditInlineAdmin]

class SupplementAdmin(admin.ModelAdmin):
  inline = [AuditInlineAdmin]

admin.site.register(Daily, DailyAdmin)
admin.site.register(Supplement,SupplementAdmiin)

你可能感兴趣的:(python,django,python,后端)