什么是应用数据库之间关系的正确方法?
What is a right method to apply relations between database?
我想创建一个简单的应用程序来跟踪房间里的人。我想要 2 table 人和房间。
像这样
class Person(models.Model):
name = models.CharField()
class Room(models.Model):
number = models.IntegerField()
max_occupancy = models.IntegerField() //set up max person in room
我的问题是:
我如何将房间分配给某人我可以只使用外键吗?
我可以查询房间人数吗?
这可能有效:
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
并更新入住人数的检查。
我想创建一个简单的应用程序来跟踪房间里的人。我想要 2 table 人和房间。 像这样
class Person(models.Model):
name = models.CharField()
class Room(models.Model):
number = models.IntegerField()
max_occupancy = models.IntegerField() //set up max person in room
我的问题是:
我如何将房间分配给某人我可以只使用外键吗? 我可以查询房间人数吗?
这可能有效:
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
并更新入住人数的检查。