bink1time
bink1time

Reputation: 171

Form posting Django

I can't get my django app to post to the db. I'm trying to pass my foreign key so I can post it correctly.

Sorry if it's something basic I'm missing I'm just starting. I think it never gets to form = ResultForm(request.POST). And just gives me the form = ResultForm.

Here is my code:

Model:

class Result(models.Model):
    category = models.ForeignKey(Category)
    category_result = models.CharField(max_length=200)
    rating = models.DecimalField('', '', 8, 3)
    votes = models.IntegerField(default=0)
    created_by = models.IntegerField(default=0, null=True, blank=True)
    created_on = models.DateTimeField('created on')
    def __unicode__(self):
        return self.category_result

Form:

class ResultForm(forms.ModelForm):
    category_result = forms.CharField(max_length=200,help_text="Your best line")
    rating = forms.DecimalField(widget=forms.HiddenInput(), initial=0)
    votes = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
    created_by = forms.IntegerField(widget=forms.HiddenInput(), initial=1)
    category = forms.IntegerField(widget=forms.HiddenInput())
    class Meta:
        model = Result
        fields = ('category_result', 'rating', 'votes')

view:

def help_out(request, category_id):
    if request.method == 'POST':
        form = ResultForm(request.POST)

        if form.is_valid():
            form.save(commit=False)
            form.category = category_id
            form.save()

            return index(request)

        else:
            print form.errors

    else:
        form = ResultForm
    context = {'form': form, 'category_id': category_id}
    return render(request,'pocketwingman/help_out.html', context)

template:

<!DOCTYPE html>
<html>
    <head>
        <title>Pocketwingman</title>
    </head>

    <body>
        <h1>Add a Result</h1>

            <form id="result_form" method="post" action="/pocketwingman/help_out/{{category_id}}/">

                {% csrf_token %}
                {% for hidden in form.hidden_fields %}
                    {{ hidden }}
                {% endfor %}

                {% for field in form.visible_fields %}
                    {{ field.errors }}
                    {{ field.help_text}}
                    {{ field }}
                {% endfor %}

                <input type="submit" name="submit" value="Create Line" />
            </form>

    </body>

</html>

url config:

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^(?P<category_id>\d+)/$', views.help_me, name='help_me'),
    url(r'^help_out/(?P<category_id>\d+)/$', views.help_out, name='help_out'),

)

Upvotes: 0

Views: 104

Answers (1)

iMom0
iMom0

Reputation: 12911

You should initiate your form if it's not a POST:

else:
    form = ResultForm()

append () to form class.

Upvotes: 1

Related Questions