2016-07-20 14 views
1

私は部屋の人を追跡するための簡単なアプリケーションを作成したいと思います。私は2人のテーブル人と部屋が欲しい。私の質問は、このデータベース間にリレーションシップを適用する正しい方法は何ですか?

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

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

よう 何かをしている:私は人に部屋を割り当てる方法

は、私はちょうど、外部キーを使用することができますか? 部屋の人数を確認する機会はありますか?

答えて

1

これはうまくいくかもしれない:例えば

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) 

を:

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'] 

あなたは人が複数の部屋に割り当てることがしたい場合は、私たちがManyToManyFieldを使用しても乗員数のチェックを更新することができます。

+0

ありがとう – Spyx

関連する問題