2017-02-10 4 views
0

Ich habe das Benutzermodell in Django erweitert.Erhalte Daten aus der Benutzertabelle und der erweiterten Benutzertabelle

Das Modell für Anwender erstreckt sich wie folgt:

class Member(models.Model): 
    user_id = models.ForeignKey(to=User) 
    number = models.CharField(max_length=10) 
    match_code = models.CharField(max_length=50) 
    parent = models.ForeignKey("self", null=True, blank=True) 
    name = models.CharField(max_length=100) 
    address = models.CharField(max_length=255) 
    postcode = models.CharField(max_length=10) 
    city = models.CharField(max_length=100) 
    country = models.ForeignKey(to=Country, null=True) 
    language = models.ForeignKey(to=Language) 
    telephone = models.CharField(max_length=50) 
    mobile = models.CharField(max_length=50) 
    main_email = models.EmailField(null=True) 

    def __str__(self): 
     return self.name 

Jetzt will ich überprüfen, ob Benutzer passende E-Mail von User Tabelle und der Anzahl von Member Tabelle vorhanden sind.

Wie kann ich das tun?

Im Moment mache ich dies wie folgt:

email = "[email protected]" 
user = User.objects.get(email=email) 
member = Member.objects.get(user_id=user.id) 

So ich zum ersten Mal von Daten aus Tisch zu bekommen und dann bekomme ich alles von Mitgliedstabelle.

Aber gibt es einen besseren Weg?

Antwort

1

Das Folgende wird, dass der Check tun:

Member.objects.get(user_id__email=email, number=number) 

Zwei Dinge:

User.objects.filter(email=email, member__number=number).exists() 

Sie diese Mitglieder über abrufen kann es

  • rufen Sie nicht Ihre ForeignKey'user_id', rufen 'user'. Das Feld user_id wird dann automatisch erstellt.
  • Wenn es nicht möglich, mehr Mitglieder pro Benutzer sein sollte, machen user ein OneToOneField
0

Wenn Benutzer vorhanden:

if User.objects.filter(email=email).exists(): 
    member = Member.objects.get(user_id=User.objects.get(email=email).id) 
1

Sie das Mitglied in einem Rutsch bekommen, wenn das, was Sie wollen:

Member.objects.get(user_id__email=email) 

Beachten Sie, dass Ihre Fremdschlüssel wirklich nur user aufgerufen werden soll, nicht user_id.

Verwandte Themen