2016-07-23 4 views
1

Mein Benutzer hat Telefonkontaktliste (en) - [3121234567,2121234567,66]Speicher-Liste (n) in einer Datenbank

Jetzt mag ich jeden Benutzer in der Lage sein, so viel LIST wie möglich zu speichern. Jeder Liste muss ein Name (oder eine Beschreibung) unter jedem Benutzerkonto beigefügt sein. Hinweis: Die Anzahl der LIST hängt von den Bedürfnissen des Benutzers ab. Beispiel:

Studenten [3121234567,2121234567,66]

Club-Mitglied [81,8151234567,8171234567]

Nun, wie lagere ich sie in einer Datenbank.

Django Benutzermodell

Klasse CustomUser (AbstractBaseUser):

username = models.CharField(max_length=254, unique=True)  
first_name = models.CharField(max_length=24) 
last_name = models.CharField(max_length=30) 
phone = models.CharField(max_length=10) 
email = models.EmailField(max_length=128) 
street = models.CharField(max_length=128) 
city = models.CharField(max_length=128) 
state = models.CharField(max_length=2, choices=STATE_CHOICES, default=STATE) 
zip_code = models.IntegerField(max_length=5, null=True, blank=True 

USERNAME_FIELD = 'email' 
REQUIRED_FIELD = ['username', 'first_name', 'last_name', 'phone', 'street', 'city', 'state'] 

objects = CustomUserManager() 

Edit (Added): Ich suche nicht Schüler oder Clubmitglied Modelle zu erstellen. Dieser Name wird verwendet, um die Python-Telefonkontaktliste zu identifizieren. PhoneAddress kann für einen Benutzer als Student (benannt) bezeichnet werden, für einen anderen jedoch als "Conference Attendant". Jeder Benutzer hat unterschiedliche Listen.

PhoneAdress PhoneAdress2 PhoneAdress3 [3121234567,2121234567,66] [4121234567,3121234567,66] [7121234567,8121234567,96]

Antwort

2

Lemme Vermutung, werden Sie von einem NoSQL Hintergrund kommen, wo die Datenbank ein Dokument in einem JSON-Formular?

Wenn es so ist, tut mir leid, in einer relationalen Datenbank, die von Django in PostgreSQL oder MySQL verwendet wird, nennen sie etwas Fremdschlüssel, und das ist Ihre Art, mehrere "Listen" zu einem bestimmten Feld zu speichern.

Wenn viele Benutzer wollen viele Listen wie möglich zu speichern, wie sind Sie auf etwas so aussieht, grob gesagt:

class myUserModel(models.Model): 
    # your arbitrary fields here 
    # then you do something like this: 

class Student(models.Model): 
    user = models.ForeignKey(User) 

class clubMember(models.Model): 
    user = models.ForeignKey(User) 

Mit der obigen Konfiguration können Sie so viele Student Objekte hinzufügen zugeordnet die myUserModel Klasse, so wie die clubMember

wenn Sie jedoch speziell PostgreSQL nutzen möchten, als Ihr Backend (vielleicht als unbefristete Speicher-Backend), könnten Sie ein Gefühl im Umgang mit Django Unterstützung für die ArrayField

01 finden

Und Sie müssen das Django-Benutzermodell eventuell erweitern, um zusätzliche Felder hinzuzufügen, sofern Sie nicht bereit sind, ein benutzerdefiniertes Benutzermodell zu erstellen.

Weitere Informationen:

Ich hoffe, die oben hilft

+0

Ich suche nicht Student oder ClubMember Modelle direkt zu erstellen. Ich möchte, dass Benutzer ihre Telefonkontakte python-Liste (n) benennen können. Der Benutzer kann beliebig viele haben. Ich benutze PostGreSQL. Ich habe ArrayField nicht verwendet. Ich werde es mir ansehen. Mein Modell ist ein benutzerdefiniertes Modell, daher der AbstractBaseUser. – Divino

0

einige Modelle erstellen:

class Club(models.Model): 
    name = models.CharField(max_length=256,blank=True,null=True) 
    date_open = models.DateField() 

class Institution(models.Model): 
    name = models.CharField(max_length=256,blank=True,null=True) 
    address = models.CharField(max_length=256,blank=True,null=True) 
    type = models.CharField(max_length=256,blank=True,null=True) #university, college 

Anstatt mit

class CustomUser(AbstractBaseUser): 
    username = models.CharField(max_length=254, unique=True)  
    first_name = models.CharField(max_length=24) 
    last_name = models.CharField(max_length=30) 

Verwendung Zusammensetzung in Form von OneOnOneField

class UserProfile(models.Model): 
    user = models.OneOnOneField(User,blank=True,null=True) 
    club_member = models.ManyToManyField(Club,blank=True, null=True) 
    institutions = models.ManyToManyField(Institution,blank=True, null=True) # student in 

Sobald Sie diese haben, können Sie auf die Listen so viele Institutionen und Vereine erhalten und fügen:

user = User.objects.get(id=user_id) 
club = Club.objects.get(id=club_id) 
institution = Institution.objects.get(id=institution_id) 

user.profile.clubs.add(club) 
user.profile.institutions.add(institution) 

So, um zu überprüfen, ob der Benutzer ein Mitglied eines Clubs ist

club = user.proile.clubs.get(id=club_id) 

und um zu verifizieren, dass der Benutzer ein Student in einer Institution ist, verwende

institution = user.profile.institutions.get(id=institution_id) 
Verwandte Themen