IT박스

Django의 GenericForeignKey를 모델 목록으로 제한하려면 어떻게해야합니까?

itboxs 2020. 12. 8. 07:53
반응형

Django의 GenericForeignKey를 모델 목록으로 제한하려면 어떻게해야합니까?


콘텐츠 유형 GenericForeignKey를 가진 모델이 미리 정의 된 목록의 모델 만 가리킬 수 있다고 django에게 알리는 방법이 있습니까? 예를 들어, A, B, C, D의 4 가지 모델과 GenericForeignKey를 보유한 모델 X가 있습니다. GenericForeignKey에 대해 A와 B 만 허용된다는 것을 X에 알릴 수 있습니까?


예를 들어 앱은 app 및 app2이고 앱에는 A, B 모델이 있고 app2에는 C, D 모델이 있습니다. 당신은 단지보고 싶어 app.A 및 app.B 및 app2.C을

from django.db import models

class TaggedItem(models.Model):
    tag = models.SlugField()
    limit = models.Q(app_label = 'app', model = 'a') | models.Q(app_label = 'app', model = 'b') | models.Q(app_label = 'app2', model = 'c')
    content_type = models.ForeignKey(ContentType, limit_choices_to = limit)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

ForeignKey에 limit_choices_to를 사용하십시오.

자세한 내용과 Q 객체, app_label에 대해서는 django 문서를 확인하십시오. 적절한 app_label 및 모델을 작성해야합니다. 이것은 단지 코드 스 니펫입니다.

더하기 : 잘못된 app_label을 작성한 것 같습니다. 이것은 당신을 도울 수 있습니다.

from django.contrib.contenttypes.models import ContentType
for c in ContentType.objects.all():
    print(c.app_label, c.model)

참고 URL : https://stackoverflow.com/questions/6335986/how-can-i-restrict-djangos-genericforeignkey-to-a-list-of-models

반응형