Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Contrainte unique sur plusieurs colonnes d'une table

0 votes

Je débute avec django, et j'ai vraiment du mal à ne pas gérer moi-même mes requêtes sql et le modèle de mes tables.

J'ai une simple table de relations entre une table articles et une table catégories.

class ArticlesCategories(models.Model):
    cat_id = models.ForeignKey(Categories, on_delete=models.DO_NOTHING)
    art_id = models.ForeignKey(Articles, on_delete=models.DO_NOTHING)
    class Meta:
        unique_together = ('cat_id', 'art_id')

De ce modèle, je m'attendais donc à pouvoir insérer dans cette table des entiers.

artcat = ArticlesCategories()
artcat.art_id = 10
artcat.cat_id = 2

Et à récupérer une erreur de contrainte d'unicité au cas où cette entrée existe déjà dans la table.

Sauf que django râle parce qu'il veut des objets.

Cannot assign "2": "ArticlesCategories.cat_id" must be a "Categories"
instance.

De plus si je visionne le schéma de la table générée, il n'y a aucun unique sur les 2 colonnes, wtf !

On va quand même se prendre la tête à construire des models uniquement pour faire de simples insertions parce qu'en fait le schéma des tables générées est tellement à chier qu'on se demande à quoi ça sert que django s'en mêle.

Y a-t-il une autre façon de faire en utilisant de simples entiers ?
Pourquoi django ne créé pas un unique dans la table sql plutôt que si j'ai bien compris de faire cette vérification en interne ?

demandé 20-Dec-2019 par anonyme

Se connecter ou S'inscrire pour répondre à cette question.

...