Hmm basé sur la documentation de get_or_create()
:
En anglais, cela signifie commencer par tout argument de mot-clé de non-'defaults que ne contient pas un double underscore (qui indiquer une recherche non exacte).
Je dirais que ce que vous voulez faire est pas possible que votre requête pourrait retourner plus d'un résultat. Les arguments passés à get_or_create()
doivent être d'une manière telle qu'un résultat unique est renvoyé.
Vous pouvez essayer __exact
au lieu de __contains
:
inventory_transaction.objects.get_or_create(staffs__surname__exact=sname,staffs__firstname__exact=fname)
Mais je ne pense pas que get_or_create()
peut créer des objets clés étrangers automatiquement.
donc probablement la chose la plus facile dans ce cas est la suivante:
try:
itrans = inventory_transaction.objects.get(staffs__surname__contains=sname,staffs__firstname__contains=fname)
except inventory_transaction.DoesNotExist:
staff = staff_name(firstname=fname, surname=sname)
staff.save()
itrans = inventory_transaction(staffs=staff)
itrans.save()
pratique BTW courante consiste à utiliser des noms de capital pour les classes et je n'utiliser comme ils underscores sont également utilisés dans DB lookups. Cela dit, renommez vos classes à StaffName
et InventoryTransaction
@Spikie: Voici la requête; S'il vous plaît utiliser des lettres majuscules pour les noms propres comme "je". Vous pouvez mettre à jour votre question pour la rendre lisible, vous pourriez obtenir de meilleures réponses si votre question est bonne. –
Ok ... Ok Merci – Spikie