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

How to identify which model object has been chosen?

如何识别使用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']

returns对象的方法str有时不足以识别语言。是否有可能获得 id 而不是此 str 方法?

拥有 语言对象。显然,如果您打印它,您将获得 Unicode 表示形式。但是元素是完整的对象,其所有属性包括 id.

当你在对象上调用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.

的语言模型实例