python - 如果我知道第一个字段值,如何从模型中获取另一个字段值?
问题描述
我正在尝试学习 django 并面临访问模型的问题。
我有这样的模型models.py
:
class Countries(models.Model):
Country = models.CharField(max_length=200)
PPP = models.DecimalField(max_digits=15, decimal_places=10)
def __str__(self):
return self.Country
现在views.py
我想根据用户输入进行一些计算。用户将从第一个字段 ( Country
) 中选择值,我需要PPP
基于此找到第二个字段值 ( )。
这意味着我的数据结构如下:
Country | PPP
----------------
Lithuania | 0.45
Germany | 0.86
Estonia | 0.55
Spain | 0.77
所以我会知道国家,我需要访问它的 PPP。我该怎么做?
因为我尝试的各种解决方案给了我一个错误。
我厌倦了 Lats 解决方案:
pVal = str(form.cleaned_data['Country'])
country = Countries.objects.first()
pValKof = getattr(country, pVal)
根据我的研究,我觉得我应该接近解决方案,但我无法getattr
完全理解。或者也许还有其他方法可以实现这一目标?
编辑:这是我的相关部分forms.py
class PGPskaiciuokle(forms.Form):
country = forms.ModelChoiceField(queryset=Countries.objects.all(),
label="Choose country")
def clean_country(self):
country = self.cleaned_data['country']
return country
解决方案
编辑:更改了我的解决方案,因为我错过了表单字段是 ModelChoiceField 的事实
代替:
pVal = str(form.cleaned_data['Country'])
country = Countries.objects.first()
pValKof = getattr(country, pVal)
做这个:
country = form.cleaned_data['Country']
ppp = country.PPP
此外:
Python 中的属性应该以小写字母开头,类以大写字母开头,所以不要使用 Country 和 PPP,而是使用 country 和 ppp(不确定 ppp 代表什么,使用更具描述性的名称不会有什么坏处)
模型名称应该是单数。因此,使用 Country 而不是 Country
属性 Country 可以更具描述性。尝试使用名称而不是国家/地区。
我会为每个国家/地区选择一个唯一的名称。
所以要清理一下你的代码:
class Country(models.Model):
name = models.CharField(max_length=200, unique=True, null=False)
ppp = models.DecimalField(max_digits=15, decimal_places=10)
def __str__(self):
return self.name
和
country = form.cleaned_data['country']
ppp = country.PPP
和表格文件:
class PGPskaiciuokle(forms.Form):
country = forms.ModelChoiceField(queryset=Country.objects.all(),
label="Choose country")
推荐阅读
- angular - 如何根据angular8中的日期选择将值绑定到对象数组
- spacy - spaCy 仅在调用“rasa train”时无法加载模型
- discord-jda - 如何使用 JDA 在 Discord 服务器(不是用户/机器人 DM)中创建私人频道:Java Discord API
- firebase - 如何以非实时方式将数据保存为firebase中的日志,以便更新和读取这些数据的成本不那么高?
- c - 复制指针和内存分配混乱
- javascript - 如何使用两个数组将复选框的值设置为 true?
- javascript - Windows 版 Safari 浏览器是否支持 ECMAScript 2016(ECMAScript 7)?
- apache-flink - 按时间属性窗口并推送到流
- java - Java Sprint-Boot:无法访问@Configuration 中定义的@Bean
- git - 如何在 SmartGit 中克隆一个简单的 HTTPS 存储库?