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.
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