【问题标题】:How to identify which model object has been chosen?如何识别选择了哪个模型对象?
【发布时间】:2016-04-06 03:35:47
【问题描述】:

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

【问题讨论】:

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


    【解决方案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)
    

    DjangoFormrequest.POSTrequest.GET 或任何字典作为数据映射到每个字段的类型。在这种情况下,它会将它们映射到 ModelChoiceField 的语言模型实例。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 2013-09-24
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多