4

私は Django を初めて使用し、理解するために最善を尽くしましたが、まだ長い道のりがあります。私は、これらのクラスからのデータを表示する必要がある Web ページを作成する必要があるプロジェクトに取り組んでいます。

class team(models.Model):
    team_name = models.CharField(max_length = 40)
    def __unicode__(self):
            return self.team_name

class metric(models.Model):
    team = models.ForeignKey(team)
    metric_name = models.CharField(max_length = 40)
    def __unicode__(self):
            return self.metric_name


class members(models.Model):
    metric = models.ForeignKey(metric)
    member_ID = models.CharField(max_length = 40)
    member_name = models.CharField(max_length = 40, null=True, blank=True)
    def __unicode__(self):
            return self.member_ID

さらに、このデータも編集可能にしたいと考えています。つまり、一度押すとユーザーがこれらのフィールドを編集できるようになり、保存するとデータベースが自動的に更新される [編集] ボタンが必要です。

今、私が理解している限り。ある種のテーブルを使用してこのデータを表示する必要があり、ユーザーが [編集] ボタンをクリックすると、データを編集できるようにテーブルをフォームに変更する必要がありますか? 保存をクリックすると、データベースが更新されます。

Djangoでこれをすべて行う方法がわかりません。誰かが私にどのように進めるかを段階的に紹介してくれたら、おそらくいくつかの参考文献を参照してください。

ありがとう :)

更新:前に言及するのを忘れていました。ユーザーが team_name を選択するページを既に作成しています。その後、その特定のチームのテーブルを表示する別のページにリダイレクトされます。また、そのページを編集可能にしたいと考えています。モデルフォームを使用すると、チーム モデルの単一のオブジェクトにアクセスできなくなります。

UPDATE2:私はまだこれにこだわっています。モデルクラスのすべてではなく、いくつかの要素と変数のみを表示する方法がわかりません。それとは別に、データベースのどのオブジェクトを編集するかについてユーザーから入力を受け取り、その特定のオブジェクトを編集可能に表示できるフォームを作成する方法を理解できません。

4

2 に答える 2

4

関連する質問者コメントはこちらこちら。まず、クラス名を大文字で書く必要があります。ドキュメントを確認してください。

このようなクエリセットのフォームを作成します。

フォーム.py

from django.forms import ModelForm
class MembersForm(ModelForm):
    class Meta:
        model = Members

urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns('yourapp.views',
    url(r'^$',
        # /
        view = 'index',
        name = 'team-index',
    ),
    url(r'^(?P<lookup_team>[-\w]+)/$',
        # .../team-extreme/
        view = 'update',
        name = 'update-members',
    ),
)

views.py (アプリケーションの)

from django.http import HttpResponse
from django.template.context import RequestContext
from django.shortcuts import render_to_response, reverse, redirect
from yourapp.models import Members
from yourapp.forms import MembersForm

def index(request):
    queryset = Members.objects.all()

    template = 'yourapp/index.html'
    kwvars = {
        'data': queryset,
    }
    return render_to_response(template, kwvars, RequestContext(request))


def update(request, lookup_team):
    """change members being in a special team"""

    queryset = Members.objects.filter(metric__team__team_name=lookup_team)

    if request.POST:
        form = MemberForm(request.POST, instance=queryset)
        if form.is_valid():
            form.save()
            return redirect(reverse('team-index'))
    else:
        form = MemberForm(instance=queryset)

    template = 'yourapp/update.html'
    kwvars = {
        'form': form,
    }
    return render_to_response(template, kwvars, RequestContext(request))

お役に立てれば。ご不明な点がございましたら、コメントをお寄せください。

于 2012-10-11T05:44:19.013 に答える
1

あなたが説明したように動的に実装したい場合、これは Django だけでは不可能です。Django はテーブルとフォームを提供できますが、ページをリロードせずに動的に変更するには (これが本当に必要なことだと思います)、クライアント側のコードである JavaScript が必要です。

ただし、データとフォームの表示については、Django のクラス ベースのジェネリック ビューを使用してください。

ListViewDetailsViewは、モデルからのデータの表示を開始する必要があります。

ModelForm を適切な汎用編集ビューと組み合わせることで、データの編集を開始できます。

これらのビューは、デフォルトで、一般的に便利な形式でデータを返し、独自のテンプレートを使用してカスタマイズできます。私が提供したリンクを読んで、そこから作業することをお勧めします。それでうまくいくはずです。

于 2012-10-10T22:34:26.043 に答える