我有几个模型:
class MyUser(models.Model):
district = models.ForeignKey(
District,
on_delete=models.CASCADE,
default=None,
blank=True,
null=True,
)
class District(models.Model):
timezone = TimeZoneField(default="US/Eastern")
我正在尝试写一个函数来获取用户的时区。
我试过这个:
def get_timezone_for_user(user: MyUser) -> datetime.timezone:
if not user.district_id:
return DEFAULT_TIMEZONE
return user.district.timezone
但是mypy
不喜欢这样,因为它认为user.district
仍然可以是None
,即使我知道它不能,因为district_id
的存在意味着user.district也不是None。
我可以在其中添加一个assert user.district is not None
,但这样我将引发一个额外的查询,只是为了说服mypy
。有什么不需要添加额外查询的想法吗?
1条答案
按热度按时间u3r8eeie1#
您已经在
return
语句中执行了额外的SQL查询,因此这种方法应该执行相同数量的SQL语句。如果user.district_id
是None
,则ORM无论如何都不会尝试SELECT
: