ContentType表的用法

weixin_33749242發表於2018-01-26
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType

# Create your models here.

class DegreeCourse(models.Model):
    """學位課程
     ID    名稱
     1    學位課1
     2    學位課2

    """
    name = models.CharField(max_length=128, unique=True)
    #反向獲取關聯欄位,不會在資料庫中生成欄位
    x1 = GenericRelation("Coupon")

class Course(models.Model):
    """課程
     ID    名稱
     1    普通課1
     2    普通課2
    """
    name = models.CharField(max_length=128, unique=True)

class Coupon(models.Model):
    """優惠券生成規則
    ID     優惠券名稱                A FK                  B.FK           c.FK
     1       通用                 null                    null
     2       滿100-10               8                      1
     3       滿200-30               8                      2
     4       滿200-30               9                      1

    ID     優惠券名稱         content_type_id(表)         object_id(表中資料ID)
     1       通用                 null                    null
     2       滿100-10               8                      1
     3       滿200-30               8                      2
     4       滿200-30               9                      1
    總結:
    """
    name = models.CharField(max_length=64, verbose_name="活動名稱")
    brief = models.TextField(blank=True, null=True, verbose_name="優惠券介紹")

    # 那個表?
    content_type = models.ForeignKey(ContentType, blank=True, null=True)
    # 物件ID
    object_id = models.PositiveIntegerField("繫結課程", blank=True, null=True, help_text="可以把優惠券跟課程繫結")

    content_object = GenericForeignKey('content_type', 'object_id')

  • views.py
def test(request):

    # models.UserInfo.objects.filter()

    # content = ContentType.objects.get(app_label='app01',model='userinfo')
    # model_class = content.model_class()
    # print(model_class.objects.all())


    # 給學位課1或普通課建立優惠券
    # d1 = models.DegreeCourse.objects.get(id=1)
    # models.Coupon.objects.create(name='優惠券', brief='200-30', content_object=d1)

    # d1 = models.Course.objects.get(id=1)
    # models.Coupon.objects.create(name='優惠券', brief='100-90', content_object=d1)

    # 當前優惠券,繫結的課程?
    obj = models.Coupon.objects.get(id=1)
    print(obj.content_object)



    # 當前課程,都有哪些優惠券?
    # obj = models.DegreeCourse.objects.get(id=1)
    # print(obj.x1.all())
    # v = models.DegreeCourse.objects.values('name','x1__brief')
    # print(v)

    return HttpResponse('...')

使用場景:
表中有多個欄位使用ForeignKey的欄位,同時需要滿足這個一對多隻能選擇其一

相關文章