Django:访问ModelForm类中的forms.CharField WITHIN中的字符串值

问题描述 投票:1回答:1

在下面的Form类中,我让用户输入街道名称,数字和邮政编码。

class MeldingForm(forms.ModelForm):

    street = forms.CharField(max_length=256, help_text="Street: ")
    number = forms.CharField(max_length=10, help_text="Number: ")
    zip = forms.ChoiceField(choices=((34000, 'TownA'), (34001, 'TownB'),
                                     (34010, 'TownC'), (34012, 'TownD')))

我想通过使用这三个字段的值(字符串)自动提取坐标。我定义了一个方法get_closest_coords(),它将这3个字符串作为参数(并且在其他场合下工作得非常好)并在类定义中尝试了这个,所以我可以将值赋给坐标变量。

    lat, lng = get_closest_coords(street.__str__(), number.__str__())

    coord_lat = forms.FloatField(widget=forms.HiddenInput(), initial=lat)

我已经尝试了各种方法来访问这些字段的字符串值,但现在没有一个工作...

django forms
1个回答
0
投票

好吧,我在此期间自己解决了这个问题。它实际上非常简单。我的问题基本上表明我没有完全掌握Django的工作原理。

您无法在类定义中为属性设置新值(默认值除外)。适当的地方是你的应用程序的views.py文件(我认为)。以下是我如何解决它:

class MeldingForm(forms.ModelForm):

    street = forms.CharField(max_length=256, help_text="Street: ")
    number = forms.CharField(max_length=10, help_text="Number: ")
    zip = forms.CharField(max_length=4, initial='34000')

在app的views.py文件中,在add_Melding函数的定义中,我添加了以下部分(在检查表单条目的有效性等之后...)

def add_Melding(request):
    melder = request.user
    form = MeldingForm(request.POST)
    melding = form.save(commit=False)
    melding.melder = melder
    melding.coord_lng, melding.coord_lat = get_closest_coords(melding.street, melding.number, melding.zip)
    melding.save()

因此,线索是首先设置表单条目,而不提交它们(commit = false),然后分配新值(在本例中为melder和坐标),然后正确保存表单。希望这可以帮助!如果您有更好的建议,请随时发表评论!

© www.soinside.com 2019 - 2024. All rights reserved.