Django 模型字段自动递增,但不根据 ID
Django model field automatically incremented, but not according IDs
我是 Django 的初学者,我一直在搜索这个问题,但没有找到令人满意的解决方案。
假设我想创建一个模型来识别给定的 table 中给定的 chair 房子的房间,以及它的高度(椅子)。然后考虑如下记录:
House
Room
Table
Chair
Chair Height (cm)
White House
Kitchen
1
1
75
White House
Kitchen
2
1
55
White House
Kitchen
2
2
65
Buckingham Palace
Main State Room
1
1
70
Buckingham Palace
Main State Room
1
2
70
复合主键应包括 House、Room、Table 和 Chair。一旦引入 House、Room 和 Table,我创建的模型不允许我增加 Chair 的整数值。有没有办法在 models.py 文件中做到 ?我不想让用户在chair字段中引入任何数字,而是根据已经引入的house、room和table来引入对应的下面一个(有例如,不应该是没有第一把和第二把椅子的第三把椅子。
我一直在搜索 AutoField 类型,但它似乎不是我想要的。在开发的其他部分是否需要考虑这一点? (用户表单...)
非常感谢您。
class ChairLocation(models.Model):
house = models.CharField()
room = models.CharField()
table = IntegerField(validators=[MinValueValidator(1)])
chair = IntegerField(validators=[MinValueValidator(1)]) #¿?¿?¿?¿?
class Meta:
unique_together = (('house', 'room', 'table', 'chair),)
...
你需要重写你模型的save方法,然后获取chair的最高值,自己递增。
from django.db.models import Max
class ChairLocation(models.Model):
house = models.CharField()
room = models.CharField()
table = IntegerField(validators=[MinValueValidator(1)])
chair = IntegerField(validators=[MinValueValidator(1)]) #¿?¿?¿?¿?
class Meta:
unique_together = (('house', 'room', 'table', 'chair'),)
def save(self, *args, **kwargs):
max_chair = 0
try:
max_chair = ChairLocation.objects.filter(house=self.house, room=self.room, table=self.table).aggregate(Max('chair'))["chair__max"]
except:
max_chair = 0
self.chair = max_chair + 1
return super(ChairLocation, self).save(*args, **kwargs)
我是 Django 的初学者,我一直在搜索这个问题,但没有找到令人满意的解决方案。
假设我想创建一个模型来识别给定的 table 中给定的 chair 房子的房间,以及它的高度(椅子)。然后考虑如下记录:
House | Room | Table | Chair | Chair Height (cm) |
---|---|---|---|---|
White House | Kitchen | 1 | 1 | 75 |
White House | Kitchen | 2 | 1 | 55 |
White House | Kitchen | 2 | 2 | 65 |
Buckingham Palace | Main State Room | 1 | 1 | 70 |
Buckingham Palace | Main State Room | 1 | 2 | 70 |
复合主键应包括 House、Room、Table 和 Chair。一旦引入 House、Room 和 Table,我创建的模型不允许我增加 Chair 的整数值。有没有办法在 models.py 文件中做到 ?我不想让用户在chair字段中引入任何数字,而是根据已经引入的house、room和table来引入对应的下面一个(有例如,不应该是没有第一把和第二把椅子的第三把椅子。
我一直在搜索 AutoField 类型,但它似乎不是我想要的。在开发的其他部分是否需要考虑这一点? (用户表单...)
非常感谢您。
class ChairLocation(models.Model):
house = models.CharField()
room = models.CharField()
table = IntegerField(validators=[MinValueValidator(1)])
chair = IntegerField(validators=[MinValueValidator(1)]) #¿?¿?¿?¿?
class Meta:
unique_together = (('house', 'room', 'table', 'chair),)
...
你需要重写你模型的save方法,然后获取chair的最高值,自己递增。
from django.db.models import Max
class ChairLocation(models.Model):
house = models.CharField()
room = models.CharField()
table = IntegerField(validators=[MinValueValidator(1)])
chair = IntegerField(validators=[MinValueValidator(1)]) #¿?¿?¿?¿?
class Meta:
unique_together = (('house', 'room', 'table', 'chair'),)
def save(self, *args, **kwargs):
max_chair = 0
try:
max_chair = ChairLocation.objects.filter(house=self.house, room=self.room, table=self.table).aggregate(Max('chair'))["chair__max"]
except:
max_chair = 0
self.chair = max_chair + 1
return super(ChairLocation, self).save(*args, **kwargs)