2010-03-31 8 views
0

JeForeignKey django 1.1.1 modèle

class staff_name(models.Model): 

    firstname = models.CharField(max_length=150) 
    surname = models.CharField(max_length=150) 



class inventory_transaction(models.Model): 

    staffs = models.ForeignKey(staff_name) 

Je veux obtenir ou créer le nom du personnel et prénom par inventory_transaction

je ces codes ci-dessous

inventory_transaction.objects.get_or_create(staffs__surname__contains=sname,staffs__firstname__contains=fname) 

Je suis arrivé ce erreur "staffs__surname__contains can not be defined"

Qu'ai-je fait de mal?

grâce

+0

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

+0

Ok ... Ok Merci – Spikie

Répondre

2

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

+0

Ok Merci Felix! – Spikie

Questions connexes