views:

41

answers:

3

I have a view definition that (attempts to) outputs a model as a table. This is what I have so far:

def output_table(request):
    output = My_Model()
    return render_to_response('outputtable.html', {'output': output})

Here's the HTML for outputtable.html:

<html>
<table>
    {{ output.as_table }}
</table>
</html>

What am I doing wrong? It doesn't work. Now, it's passing the model correctly, because if I change My_Model() to My_Model.objects.all() and then output it as simply {{ output }} then it shows me what I would see in the Django shell.

+1  A: 

There is no method as_table on a model instance (MyModel())or on Querysets (MyModel.objects.all()). You may have seen as_table as the forms method as_table. You don't have a form there.

If you want to print a model instance/ a queryset as a table, you will have to design it yourself.

stefanw
A: 

If you're just looking to output one specific model, change your template to something like

<tr>
  <td>Name:</td>
  <td>{{ output.name}}</td>
</tr>

for all the fields you care about. If this is something you want to be able to do for any arbitrary model in your app, take a look at this snippet. That would provide you with a fields collection to loop over.

Tom
A: 

So what you need to do is the following:

1) add

from django.forms import ModelForm to your models.py

2) add

class My_Model_Form(ModelForm):  
           class Meta:  
               model = My_Model 

3) in your views.py, change output = My_Model() to output = My_Model_Form()

Now you are all set. So the trick is to inherit your Form from your original model.

DrDee