【问题标题】:What is a right method to apply relations between database?在数据库之间应用关系的正确方法是什么?
【发布时间】:2016-07-20 00:27:51
【问题描述】:

我想创建一个简单的应用来跟踪房间里的人。我想要 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

我的问题是:

我如何为人分配房间我可以只使用外键吗? 有没有机会查看房间人数?

【问题讨论】:

    标签: python django django-models django-database


    【解决方案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 并更新入住人数的检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      相关资源
      最近更新 更多