2016-07-20 33 views
1

Ich möchte eine einfache App zum Verfolgen von Personen in Räumen erstellen. Ich möchte 2 Tisch Person und Zimmer haben. so etwas wie dieseWas ist eine richtige Methode, um Beziehungen zwischen Datenbanken anzuwenden?

class Person(models.Model): 
name = models.CharField() 

class Room(models.Model): 
number = models.IntegerField() 
max_occupancy = models.IntegerField() //set up max person in room 

Meine Fragen sind:

Wie ich zuweisen Raum Person kann ich nur Fremdschlüssel verwenden? Gibt es eine Chance, dass ich die Anzahl der Personen im Zimmer überprüfen kann?

Antwort

1

Dies könnte funktionieren:

from django.core.exceptions import ValidationError 

class Room(models.Model): 
    number = models.IntegerField() 
    max_occupancy = models.IntegerField() #set up max person in room 

class Person(models.Model): 
    name = models.CharField(max_length=16) 
    room = models.ForeignKey(Room, related_name='persons') 

    def save(self, *args, **kwargs): 
     if self.room:# not necessary if the field is not nullable 
      if self.room.persons.count() >= self.room.max_occupancy : 
       raise ValidationError('Room is already full') 
     super().save(*args, **kwargs) 

Zum Beispiel:

r = Room.objects.create(number=1, max_occupancy=1) 
Person.objects.create(name='first', room=r) 
# creates 
Person.objects.create(name='second', room=r) 
# ValidationError: ['Room is already full'] 

Wenn Sie eine Person wollen mehrere Zimmer zugewiesen werden, wir ManyToManyField und auch aktualisieren, die Überprüfung der Insassen Zählung verwenden können.

+0

vielen Dank – Spyx