1

私は最初のdjangoプロジェクトに取り組んでいますが、データベースからWebページにリストとして「カテゴリ」を表示する際に問題が発生します。「オブジェクトに属性「名前」がありません。これまでのコードは次のとおりです。

モデル:

class Category(models.model):
    name = models.Charfield(max_length=128)

def __unicode__(self):
    return self.Name + ": " +str(self.id)

ビュー:

from django.shortcuts import render_to_response, redirect
from forms.models import Form, Group, Flow, Gate, Field, Event, Category
from django.core.context_processors import csrf
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse

def homepage (request):

    CatName = Category.objects.order_by('id')

    output = {
        'category_name': CatName.Name,
    }

    return render_to_response('forms/formsummary.html', output)

HTML:

<div>{{ category_name }}</div>

誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

3

Djangoでは、ORMを使用してオブジェクトをクエリする場合、次の2つの可能性があります(いずれの場合も何も返さない場合を除く)。

  • クエリはオブジェクトを1つだけ返します。その場合は、マネージャのget()メソッドを使用してクエリを実行します。
  • クエリはコレクションを返します。その場合は、all()、filter()、またはそれらのようなメソッドを使用してクエリを実行します。

この場合、クエリはCategoryオブジェクトのコレクションを返しました。これについていくつかのことを行うことができます。リスト内包表記を使用して、名前のみのリストを生成することもできます。

cnames = [c.name for c in Category.objects.all()]

または、forループを使用してリストを反復処理し、各オブジェクトで必要なことをすべて実行できます。

Djangoはすでにidフィールドでデータを並べ替えているので、この場合は順序を指定する必要はないと思います。

後でビューが戻ってきたら、リストをテンプレートに配信し、それを繰り返して必要なものを抽出することができます。

あなたの見解では:

def get_categories(request):
    categories = Category.objects.all()
    context = {'categories': categories}
    return render_to_response('template.html', RequestContext(request, context))

次に、テンプレートで:

{% for c in categories %}
    <p>{{c.name}}</p>
{% endfor %}

ここにいくつかの有用なドキュメントがあります

お役に立てれば。

于 2012-12-11T14:37:43.150 に答える
1

大文字と小文字を区別するようですが、

def__unicode__(self):
  return self.Name + ": " +str(self.id)
              ^
              name 
于 2012-12-11T14:45:38.300 に答える
0

CatNameCategoryインスタンスのコレクションです。CatNameオブジェクトではないため、オブジェクトnameにはプロパティがありませんCategory。オブジェクトが含まれていCategoryます。

コレクションを反復処理して、各カテゴリ名を表示できます。

for category in CatName:
  print category.name

まだ十分に理解していなくても、少なくともQuerySetのドキュメントを読むことをお勧めします。

最新のカテゴリだけが必要な場合は、次のようにすることができます。

def homepage (request):

    most_recent_category = Category.objects.order_by('-id')[0]

    output = {
        'category_name': most_recent_category.name
    }

    return render_to_response('forms/formsummary.html', output)
于 2012-12-11T14:29:57.260 に答える