如何识别选择了哪个模型对象?

时间:2016-01-01 18:13:06

标签: python django forms django-models django-forms

如何识别使用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方法?

2 个答案:

答案 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.POSTrequest.GET或任何字典作为数据映射到每个字段的类型。在这种情况下,它会将它们映射到ModelChoiceField的语言模型实例。