python - 当我创建 django.models 时,如何通过 room_id 进入选项 = max_guest?
问题描述
我有这样的模型:
class KeyTransfer(Model):
key_out_data = DateTimeField(null=True, blank=True)
key_in_data = DateTimeField(null=True, blank=True)
room_id = ForeignKey(Room, blank=True, null=True, on_delete=CASCADE)
guests = IntegerField(choices=[(x, str(x)) for x in range(Room.objects.get(number=room_id).max_guests)], blank=True, null=True)
notes = CharField(max_length=256, blank=True)
person_id = ForeignKey(Person, null=True, blank=True, on_delete=SET_NULL)
而且我知道我无法使用参数“choices =”在“guests”列中保存一些值,如上所示。结果我得到了错误:
...django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet. ...
我明白这个错误意味着什么。
问题是:我是否可以在不使用 django.forms 的“客人”中实现“选择”的一些类似条件?
解决方案
似乎您想根据其相关模型的字段设置模型guests
字段的上限。您可以通过覆盖方法来做到这一点,并在那里检查分配是否高于. 请参阅以下此方法的实现:KeyTransfer
room
max_guests
save
guests
max_guests
from django.db import models
from django.core.exceptions import ValidationError
class Person(models.Model):
name = models.CharField(max_length=32)
def __str__(self):
return "<Person {}>".format(self.name)
class Room(models.Model):
max_guests = models.IntegerField()
class KeyTransfer(models.Model):
key_out_data = models.DateTimeField(null=True, blank=True)
key_in_data = models.DateTimeField(null=True, blank=True)
room_id = models.ForeignKey('Room', blank=True, null=True, on_delete=models.CASCADE)
guests = models.IntegerField(blank=True, null=True)
notes = models.CharField(max_length=256, blank=True)
person_id = models.ForeignKey('Person', null=True, blank=True, on_delete=models.SET_NULL)
def save(self, *args, **kwargs):
room = self.room_id
if self.guests > room.max_guests:
raise ValidationError("Assigned guests exceeding related room's maximum limit of {}"\
.format(room.max_guests))
super().save(*args, **kwargs)
推荐阅读
- r - 查看计算线 Avplot 函数的斜率
- elasticsearch - Elasticsearch:参数“索引”和“启用”之间的区别
- laravel - 在 laravel 上为 foreach() 提供的参数无效
- python - 如何动态检查 psycopg2 中的 postgresql 约束?
- javascript - 查找高阶函数包含哪些参数
- google-apps-script - 为什么这个 Google Apps 脚本在打开时没有自动排序?
- asp.net - 在哪里以及如何使用小型 MS SQL DB 托管小型 ASP .NETCore + React JS 应用程序
- pandas - 根据 pandas df 计算单个团队的胜率
- c++ - 如何在 C++ 中的结构内定义 lambda 函数
- java - 列表到 txt 文件变得非常大,我的意思是巨大的