콘텐츠 유형이 GenericForeignKey 인 모델은 사전 정의 된 목록의 모델 만 가리킬 수 있다는 장고에게 말할 방법이 있습니까? 예를 들어 A, B, C, D의 4 가지 모델과 GenericForeignKey를 보유하는 모델 X가 있습니다. GenericForeignKey에 대해 A & B 만 허용된다는 것을 X에게 알릴 수 있습니까?Django의 GenericForeignKey를 모델 목록으로 어떻게 제한 할 수 있습니까?
49
A
답변
93
예를 들어, 앱이 app이고 app2이고 앱에 A, B 모델이 있고 app2에 C, D 모델이 있습니다. 당신이 외래 키 만 app.A 및 app.B 및 app2.C
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')
사용 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)
그러나 admin 인터페이스는 선택 필드로 사용하지 않는 것 같습니다. 왜 그런가요? – Geo
관리자 쪽에서 확인한 결과 기본 관리자로 작동합니다. 어쩌면 거기에 약간의 오타가 있었을 것입니다. 나는 네 문제를 모른다. – mumino
내 관리에서 제한을 추가 한 후 GenericForeignKey의 선택 항목 중 선택 항목이 사라집니다. 나는 단지 "---"로 남았습니다. 관리자의 선택 항목으로 스크린 샷을 게시 할 수 있습니까? – Geo