2017-10-17 15 views
1

Dans Django, existe-t-il un moyen (fonction) de tester si un champ de modèle est une clé primaire (pk)?Y at-il une fonction dans Django qui teste si une instance de champ d'un modèle est une clé primaire?

Par exemple, mon modèle est:

class Gender(models.Model): 
    name = models.CharField(max_length=50, primary_key=True) 

    def __str__(self): 
     return self.name 

Y at-il une fonction pour tester le nom étant la clé primaire?

+3

Pourquoi auriez-vous besoin de savoir (et ne pas savoir déjà)? Quel est le cas d'utilisation? –

+0

C'est lié à un autre problème. Pouvoir traiter un cas de traduction du champ clé primaire dans le paquet 'django-modeltranslation'. Référence dans [link] (https://github.com/deschler/django-modeltranslation/issues/144), commentaire au 31 oct. 2016 par yerihyo. Ma question connexe dans [link] (https://stackoverflow.com/questions/46779674/setting-django-model-primary-key-field-for-translation-with-django-modeltranslat). – Caco

Répondre

4

Vous pouvez utiliser get_field de la model meta api, puis vérifiez l'attribut primary_key, qui sera True pour les clés primaires.

field_name = 'name' 
field = MyModel._meta.get_field(field_name) 
field.primary_key 
+0

Pour la méthode get_field, il y a un autre paramètre 'many_to_many', et si le champ est un champ m2m? –

+0

@Alasdair, juste s'il vous plaît corriger la deuxième ligne de code. Je pense que vous vouliez dire 'field = MyModel._meta.get_field (field_name)', n'est-ce pas? – Caco

+0

Je ne comprends pas votre premier commentaire - ['get_field'] (https://docs.djangoproject.com/fr/1.11/ref/models/meta/#django.db.models.options.Options.get_field) prend un seul argument 'field_name', donc je ne suis pas sûr de ce que vous demandez sur les champs m2m. – Alasdair