Come posso limitare Django’s GenericForeignKey a un elenco di modelli?

C’è un modo per dire a Django che un modello con un contenttypes GenericForeignKey può solo indicare modelli da un elenco predefinito? Ad esempio, ho 4 modelli: A, B, C, D e un modello X che contiene un GenericForeignKey. Posso dire a X che solo A e B sono consentiti per GenericForeignKey?

Ad esempio, le tue app sono app e app2 e ci sono modelli A, B in app e ci sono modelli C, D in app2. vuoi vedere solo app.A e app.B e 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') 

usa limit_choices_to su ForeignKey.

controlla i documenti di django per i dettagli e gli oggetti Q, app_label. è necessario scrivere app_label e modello appropriati. Questo è solo uno snippet di codice

Inoltre: penso che tu abbia scritto app_label errata. Questo può aiutarti.

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