macintoshPrime
macintoshPrime

Reputation: 254

Trouble with Django ModelChoiceField

Hi bit of a beginner question about using django's modelchoicefield in a form I'm building.

I just need get django to display a drop down list of ingredients in a form. I've gotten to the point where the page renders but the form does not, I was getting errors before so I am kind of perplexed at the moment. I was hoping for some guidance.

Using python 2.7.6 and django 1.6.2. If I left anything out let me know.

Thanks!

Code is below:

views:

    args = {}
#add csrf sercurity
args.update(csrf(request))

args['form'] = form
return render_to_response('newMeal.html', args)

form:

from django import forms from models import meals, ingredients, recipe

class mealForm(forms.ModelForm):

breakfast = forms.ModelChoiceField(queryset=recipe.objects.all())
# Lunch = forms.ModelChoiceField(queryset=recipe.objects.all())
# Dinner = forms.ModelChoiceField(queryset=recipe.objects.all())


class Meta:
    model = meals
    fields = ('Breakfast','Lunch','Dinner','servingDate')

class recipeForm(forms.ModelForm):

class Meta:
    model = recipe
    fields = ('Name', 'Directions')

template:

    {% extends "base.html" %}

{% block content %}

<p>New Meals go here!</p>

<form action="/meals/newmeal/" method="post">{% csrf_token %}
    <table class="selection">
        {{form.as_table}}


        <tr><td colspan="2"><input type="submit" name="submit" value="Add Meal"></td></tr>
    </table>
</form>

{% endblock %}

Model;

from django.db import models import datetime

Create your models here.

class recipe(models.Model):

Name = models.CharField(max_length=200)
Directions = models.TextField()
pub_date = models.DateTimeField(auto_now_add = True)

def __unicode__(self):
    return (self.id, self.Name)

class ingredients(models.Model):

Name = models.CharField(max_length=200)
Quantity = models.IntegerField(default=0)
Units = models.CharField(max_length=10)
Recipe = models.ForeignKey(recipe)

def __unicode__(self):
    return self.Name

class meals(models.Model):

Breakfast = models.CharField(max_length=200)
Lunch = models.CharField(max_length=200)
Dinner = models.CharField(max_length=200)
servingDate = models.DateTimeField('date published')

Upvotes: 0

Views: 212

Answers (1)

suhailvs
suhailvs

Reputation: 21710

did you import the mealForm:

some thing like :from app.forms import mealForm

form is a function. so try:

args['form'] = mealForm()

Note: don't use render_to_response. it is old use render instead(so don't even need csrf)::

from django.shortcuts import render
def...(request):
....
return render(request,'newMeal.html', {'form': mealForm()})

Upvotes: 0

Related Questions