Existe-t-il un moyen de dire à Django qu'un modèle ayant un type de contenu GenericForeignKey peut uniquement pointer vers des modèles à partir d'une liste prédéfinie? Par exemple, j'ai 4 modèles: A, B, C, D et un modèle X contenant une GenericForeignKey. Puis-je dire à X que seuls les caractères A et B sont autorisés pour GenericForeignKey?
Réponse
Trop de publicités?Par exemple, vos applications sont app et app2 et il existe des modèles A, B et app, des modèles C, D dans app2. vous voulez voir uniquement app.A et app.B et 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')
utilisez limit_choices_to sur ForeignKey.
Consultez la documentation de Django pour plus de détails et les objets Q, app_label. vous devez écrire le bon app_label et le bon modèle. ceci est juste un extrait de code
plus: je pense que vous écrivez mal app_label. cela peut vous aider.
from django.contrib.contenttypes.models import ContentType
for c in Contenttype.objects.all():
print c.app_label, c.model