2017-06-07 1 views
-1

Ich habe das Standardbenutzermodell in Django erweitert. Nun sieh mal meine Modelle wie folgt:Django: Wie bekomme ich alle Benutzer mit Profilen als JSON (erweitertes Benutzermodell)

class Profile(models.Model): 
user = models.OneToOneField(User, on_delete=models.CASCADE) 
birth_date = models.DateField(auto_now=False, auto_now_add=False, default=datetime.now) 
phone_number = models.CharField(max_length=13, blank=True, default="") 
address = models.CharField(max_length=100, blank=True, default="") 
organization = models.ForeignKey(Organization, blank=True, null=True) 

Alles funktioniert gut, ich bin in der Lage neue Benutzer durch Admin-Panel hinzufügen und so weiter. Allerdings habe ich ein Problem. Ich brauche eine customize JSON Antwort auf bestimmte Anforderung in Form zurückzukehren:

[ 
{"firs_name": first_name, "phone_number": phone_number, ...}, 
{"firs_name": first_name, "phone_number": phone_number, ...}, 
... 
] 

Wie Sie sehen können, das phone_number Attribut gehört zum Profil Modell, und ich kann nicht alle Benutzer erhalten mit ihrer Profile enthalten (ich bin der Lage, um nur die ID des Benutzers zu erhalten). Hier ist die Antwort, die ich jetzt bekommen:

[{"username": "user", "profile": 2, "first_name": "User", "last_name": "User"}, {"username": "user1", "profile": 3, "first_name": "User1", "last_name": "User1"}, {"username": "user2", "profile": 4, "first_name": "User2", "last_name": "User2"}] 

Frage: Gibt es eine Möglichkeit, alle Benutzerobjekte mit Profilinformationen in ihm durch User.Objects.all() enthalten zu bekommen?

Danke!

PS: Dies ist, wie ich benutzerdefinierte JSON-Antwort machen:

def get_users_as_json(request): 
all_users = User.objects.all().values("username", "first_name", "last_name", 'profile') 
user_list = list(all_users) 
return JsonResponse(user_list, safe=False) 

Antwort

0

Es gibt Anzahl Möglichkeiten, dies zu tun, versuchen Sie diese

def get_users_as_json(request): 
    col = ["username", "first_name", "last_name", 'profile_id', \ 
    'profile__phone_number', 'profile__address_no', 'profile__birth_date'] 

    all_users = User.objects.all().values(*col) 
    user_list = list(all_users) 
    return JsonResponse(user_list, safe=False) 

def get_user_as_json(request): 
    user_list = [] 
    users = User.objects.all() 
    for user in users: 
     user_dict = {} 
     user_dict['user_name'] = user.username 
     user_dict['first_name'] = user.first_name 
     user_dict['phone_number'] = user.profile.phone_number 
     user_dict['birthdate'] = user.profile.birth_date 
     ... 

     user_list.append(user_dict) 

    user_list = list(user_list) 
    return JsonResponse(user_list, safe=False) 
0

Sie könnten alle nur geben Sie die Variablen, die Sie wan t manuell

User.objects.all() 
    .select_related('profile') 
    .values_list('username', ..., 'profile__phone_number', 'profile__address'...) 
+0

Ja! Ich habe es als User.objects.all(). Values ​​('profile__phone_number') verwendet. Vielen Dank! –

Verwandte Themen