dimanche 22 mars 2015

Django foreign key drop down

New to django and python so need a little help with a foreign key drop down. Basically, I have a category model and a image model and I want users to be able to choose which category to put the image in. How do I create a drop down for the category in the image form. Are my views and html correct too. I have had a look online but I can't seem to do it myself. I keep getting errors. Thank you.


Here are my models:



class Images(models.Model):
image = models.ImageField(upload_to='images', blank=False)
img_name = models.CharField(max_length=120, blank=True)
img_date = models.DateTimeField(default=now())
img_user = models.ForeignKey(User)
img_cat_id = models.ForeignKey(Categories)

def __unicode__(self):
return self.img_name

class Categories(models.Model):
cat_descr = models.CharField(max_length =120, blank=False)

def __unicode__(self):
return self.cat_descr


VIEWS:



@login_required
def upload_images(request):
context = RequestContext(request)
context_dict={}

if request.method == 'POST': # render the form, and throw it back.
# take the form data and process it!

form = UploadImagesForm(request.POST, request.FILES)

if form.is_valid():
print 'form is_valid'


upload_image = form.save(commit=False)
upload_image.img_user = request.user

if 'image' in request.FILES:
upload_image.image =request.FILES['image']

upload_image.save()

return render(request, 'rmb/upload.html', {'upload_image': form})

else:
print form.errors

# Not a HTTP POST, so we render our form using two ModelForm instances.
# These forms will be blank, ready for user input.
else:
form = UploadImagesForm()

context_dict = {'upload_image': form}
all_categories = Categories.objects.order_by('-id')
context_dict['all_categories'] = all_categories
print context_dict

return render_to_response('rmb/upload.html', context_dict, context)


FORMS:



class UploadImagesForm(forms.ModelForm):

#cat_list = ModelChoiceField(queryset=Categories.objects.all())

class Meta:
model = Images
fields=('image','img_name')


HTML:



{% block body_block %}
<form id="upload_form" method="post" action="/rmb/upload/"
enctype="multipart/form-data">

{% csrf_token %}
{{ upload_image.as_table }}
<input type="submit" name="submit" value="Upload" />
{% for categories in all_categories %}

<div> {{ categories.id }} </div>
{{ categories.cat_descr }}
<input type="submit" name="submit" value="Upload" />
{% endfor %}


</form>


{% endblock %}


Aucun commentaire:

Enregistrer un commentaire