如何识别使用ModelChoiceField
选择的某个对象?
就我而言,我有模型Language
:
class Language(models.Model):
shortcut = models.CharField(max_length=6)
name = models.CharField(max_length=50)
price_per_sign = models.FloatField()
def __str__(self):
return self.shortcut+': '+self.name
并形成:
class FreelancerRegistrationForm(forms.Form):
language = forms.ModelChoiceField(queryset=Language.objects.all().order_by('shortcut'))
在我的 views.py 中,我不知道如何识别已选择的模型。
print freelancer_registration_form.cleaned_data['language']
返回对象的方法str,有时不足以识别语言。是否可以使用id
代替此str
方法?
答案 0 :(得分:1)
您拥有语言对象。显然,如果你打印它,你将获得Unicode表示。但元素是完整对象,其所有属性包括id。
答案 1 :(得分:1)
当你在一个对象上调用print
时,python会在对象上调用__str__
方法(听到是在表单中选择的语言模型的实例)
如果您想获得所选实例的id
,您应该执行以下操作:
chosen_language = freelancer_registration_form.cleaned_data['language']
chosen_language_id = chosen_language.id
或更改__str__
方法的定义,例如:
def __str__(self):
return 'id: {self.id}, shortcut: {self.shortcut}, name: {self.name}'.format(
self=self)
DjangoForm
会将request.POST
或request.GET
或任何字典作为数据映射到每个字段的类型。在这种情况下,它会将它们映射到ModelChoiceField
的语言模型实例。