python - 应用数据库之间关系的正确方法是什么?

标签 python django django-models django-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 并更新占用人数的检查。

关于python - 应用数据库之间关系的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470554/

相关文章:

Python:用括号比较和替换列表[i]

python - 如何限制从python访问文件

python - sqlalchemy : filter by relationship (like django orm)?

database - 如何在 Django 中进行版本控制?

python - 用于多维自定义操作的 Tensorflow 自定义渐变

python - Flask-上传权限被拒绝

python - 即使引发异常,AssertRaises 也会失败

python django 无法让任何 View 工作

python - 上传文件时显示微调器 Django 和 Ajax

django - 在 Django 中硬编码数据的最佳方式