[PYTHON] Lorsque vous souhaitez enregistrer les données initiales de Django avec des relations

La méthode de définition des données initiales dans Django est un peu bizarre. J'écrirai ce à quoi je suis un peu accro.

Initialisation des données, y compris ForeignKey

Un didacticiel qui vous indique d'écrire la clé primaire d'un champ référencé en externe. .. Malheureusement, je ne pouvais pas faire cela car j'avais changé la clé primaire en uuid.

En passant, pour référence, je faisais quelque chose comme ça.

models.py


class UUIDpk(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4,)

    class Meta:
        abstract = True

parent.json


[
  {
    "model": "app.ParentModel",
    "fields": {
      "name": "Dog"
    }
  }
]

children.json


[
  {
    "model": "app.ChildrenModel",
    "fields": {
      "parent": "C'est un peu déraisonnable de spécifier avec uuid.."
      "name": "Chihuahua"
    }
  }
]

Natural key

Cependant, Django est un excellent FW, donc ça va ...! Vous pouvez définir les conditions de recherche pour les relations séparément de la clé primaire. Document officiel

models.py


class Parent(UUIDpk):
    class ParentManager(models.Manager):
        def get_by_natural_key(self, name):
            return self.get(name=name)

    #Se comporter et unique=Définissons-le sur True.
    name = models.CharField(max_length=50, unique=True)
    objects = ParentManager()

Dans l'exemple ci-dessus, seul le champ de nom est défini sur Clé naturelle, mais bien sûr, il est normal d'en avoir plus d'un.

Modifiez le fichier json enregistré avec loaddata comme suit.

parent.json


[
  {
    "model": "app.ParentModel",
    "fields": {
      "name": "Dog"
    }
  }
]

children.json


[
  {
    "model": "app.ChildrenModel",
    "fields": {
      "parent": ["Dog"]
      "name": "Chihuahua"
    }
  }
]

Recommended Posts

Lorsque vous souhaitez enregistrer les données initiales de Django avec des relations
Paramètres lorsque vous souhaitez exécuter python-mecab avec travis
Lorsque vous souhaitez filtrer avec le framework Django REST
Utilisez aggdraw lorsque vous voulez dessiner magnifiquement avec un oreiller
Je connais? Analyse de données à l'aide de Python ou de choses que vous souhaitez utiliser quand vous le souhaitez avec numpy
Si vous souhaitez devenir data scientist, commencez par Kaggle
Lorsque vous souhaitez envoyer un objet avec des requêtes à l'aide de flask
Lorsque vous souhaitez ajuster l'intervalle de l'échelle de l'axe avec APLpy
Lorsque vous souhaitez l'utiliser tel quel lorsque vous l'utilisez avec lambda memo
Un référentiel essentiel à utiliser lorsque vous souhaitez l'essayer avec ansible
Lorsque vous souhaitez remplacer une colonne par une valeur manquante (NaN) colonne par colonne
Signifie mémo lorsque vous essayez de faire de l'apprentissage automatique avec 50 images
Je veux frapper 100 sciences des données avec Colaboratory
Lorsque vous souhaitez mettre à jour le pilote Chrome.
Je veux recommencer avec Migrate de Django
Modèle de bonnes pratiques personnelles à utiliser lorsque vous souhaitez créer MVP avec Flask
[OpenCV] Lorsque vous voulez vérifier s'il est lu correctement avec imread
Choses à faire lorsque vous commencez à développer avec Django
Lorsque vous voulez plt.save dans l'instruction for
Lorsque la variable que vous souhaitez utiliser comme exposant dans matplotlib comporte deux caractères ou plus
Connaissances à connaître lors de la programmation de concours avec Python2
Je veux pouvoir analyser des données avec Python (partie 1)
Opération utile lorsque vous souhaitez résoudre tous les problèmes dans plusieurs langages de programmation avec Codewars
Je veux pouvoir analyser des données avec Python (partie 4)
Je veux pouvoir analyser des données avec Python (partie 2)
Lorsque vous souhaitez utiliser python 2.x sur Gentoo Linux moderne
Lorsque vous souhaitez lancer une commande UNIX sur Python
[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python
N'écrivez pas Python si vous voulez l'accélérer avec Python
Quand il est difficile de copier ce que vous avez construit avec vue
Lorsque vous souhaitez que le thème de votre documentation Sphinx soit le même
[TensorFlow] Si vous souhaitez exécuter TensorBoard, installez-le avec pip.
Lorsque vous souhaitez trier une liste multidimensionnelle sur plusieurs lignes
Ravi de vous rencontrer avec python
Comment gérer les données déséquilibrées
Opérations clés que vous souhaitez connaître
Comment augmenter les données avec PyTorch
Je veux faire ○○ avec les Pandas
Je veux déboguer avec Python
Je veux me mettre en colère contre ma mère quand la mémoire est serrée
Si vous souhaitez inclure awsebcli dans CircleCI, spécifiez la version de python
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Lorsque vous souhaitez modifier l'en-tête HTTP du client de test de Flask
Wrapper lorsque vous souhaitez afficher la couleur utf-8 + ansi dans la console Windows
Rôle possible pour empêcher le message de confirmation initial lors de la connexion avec SSH
Conseils (structure de données) à connaître lors de la programmation de compétitions avec Python2
Comment utiliser ManyToManyField avec l'administrateur de Django
Envoyer des données à l'API DRF avec Vue.js
Convertissez des données FX 1 minute en données 5 minutes avec Python
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Essayez de convertir en données ordonnées avec les pandas
Quand tu veux casser une ligne pendant longtemps
Résumons ce que vous voulez faire.
Comment lire les données de problème avec Paiza