2

ModelForm を使用してオブジェクトを作成し、データベースに保存しようとしていますが、POST データを送信すると、データが検証されていないことを示す ValueError が表示され続けます。

これはmodels.pyにあります

class Hydrant(models.Model):
    gpscoord = models.OneToOneField(GPSCoord)
    address = models.OneToOneField(Address)
    size = models.DecimalField(max_digits=10, decimal_places=3)
    def __unicode__(self):
        return '(' + str(self.gpscoord.latitude) + ', ' + str(self.gpscoord.longitude) + ')'

class HydrantForm(ModelForm):
    class Meta:
        model = Hydrant

これはviews.pyにあります

def hydrant_create(request): 
    if request.method == 'POST':
        form = HydrantForm(request.POST)
        new_hydrant = form.save() #it breaks here
        return HttpResponseRedirect(reverse('hydrant_detail', args=(new_hydrant.id,)))
    else:
        form = HydrantForm() #unbound form

    return render(request, 'structures/hydrant_create.html', {'form': form})

これは hydrant_create.html です

<h3> Creating Hydrant</h3>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="{% url 'hydrant_create' %}" method="post">{% csrf_token %}

{{ form.as_p }}

<input type="submit" value="Submit" />
</form>

「structures/hydrants/create」で、私の html テンプレートは問題ないように見えます (ただし、作成済みの GPSCoord オブジェクトと Address オブジェクトしか選択できませんが、これを簡単に修正する方法はありますか?)。ただし、フォームにデータを入力して送信をクリックすると、次のようになります。

/structures/hydrants/create/ での ValueError

データが検証されなかったため、Hydrant を作成できませんでした。

私は StackOverflow を調べましたが、他の人が抱えていた主な問題は、新しいオブジェクトの作成と既存のオブジェクトの変更を分離することでした (これを処理するために 2 つのビューがあり、「編集」ビューは同じ問題に遭遇します同じ場所。

ありがとう!

4

1 に答える 1