2016-06-15 3 views
2

私はDjango REST Frameworkといくつかの多対多の関係を持つSQLデータベースを使用しています。アプリ。関連するテーブルは以下のとおりです。djangoと多対多の関係でデータベースから特定の情報にアクセスするのに問題がある

ユーザー:ID、パスワード、last_login、IS_SUPERUSER、ユーザ名、FIRST_NAME、LAST_NAME、電子メール、is_staff、is_active、date_joined

プロフィール:ID:ID、USER_IDは、

組織をuser_organization_id 、ORGANIZATION_NAME

profile_projects:ID、PROJECT_NAME

:ID、PROFILE_IDは、

プロジェクトをPROJECT_ID

私の問題は、プロジェクトを自分のプロフィールページに正しく表示させることです。プロファイルとプロジェクトは多くのものか​​ら多くのものに分かれているため、それぞれ独自のテーブルがあります。

これはmodels.py

class Project(models.Model): 
    id = models.AutoField(primary_key=True) 
    project_name = models.CharField(max_length = 30) 

    def __str__(self): 
     return "%s" % self.project_name 

class Profile(models.Model): 
    id = models.AutoField(primary_key=True) 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    user_organization = models.ForeignKey(Organization, on_delete=models.CASCADE) 
    projects = models.ManyToManyField(Project) 

    def __str__(self): 
     return "%s's profile" % self.user 

から該当するコードである。そして、私のprofile.htmlテンプレートは次のとおりです。プロジェクト「の楽しみに組織当社のために働く私のサンプルユーザーJohn Doeの、と

{% load staticfiles %} 
{% load rest_framework %} 
<!DOCTYPE html> 
<html> 
<head> 
    <link rel="stylesheet" type="text/css" href="https://bootswatch.com/yeti/bootstrap.min.css"/> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 
    <title>{{profile.user.first_name}}'s Profile</title> 
</head> 
<body> 
    <h1>{{profile.user.get_full_name}}</h1> 
    <h2>{{profile.user_organization.organization_name}}</h2> 
    <h3>Projects</h3> 
    {{profile.projects.all}} 
    <h3>Email</h3> 
    {{profile.user.email}} 
</body> 
</html> 

'、 彼のプロフィールページのすべてが正しく表示されます(プロジェクトの下は[<Project: fun>]です)。私は物事の全体のホストを試してみた、これらは私が取得していた結果です:Webページ上の私のテンプレートの利回り「app.Project.None」で

{{ profile.projects }}(アプリは私のDjangoアプリケーションの名前である)

{{ profile.projects.name }}「なし」

{{ profile.projects.all.name }}何も表示されません。だから私は近いと知っていますが、[<Project: ___ >]をプロジェクト名の周りに表示しないようにするにはどうすればいいですか?私は、profile_projectsが他のすべての情報が1対1または1対多であるため、多くのものか​​ら多くのものになっているという事実に由来する問題だと思います。

私のサンプルユーザーは現在それぞれ1つのプロジェクトしか持っていませんが、1つのプロジェクトだけで作業すると、プロファイルごとに複数のプロジェクトを追加して表示することに心配します。

+0

{{profile。projects_set.all}}? –

+0

@LjubisaLivac何も表示されません... – Catherine

+0

逆の場合、 'profile.projects.all'または' projects.profile_set.all'にする必要があります。 – rrauenza

答えて

1

[<Project: ___ >]が表示されたら、プロジェクトの一覧が表示されます。あなたはそれらを反復するか、何とかそれらを平らにする必要があります。

あなたは、PythonとDjangoでイントロスペクションを行う方法を学習の時間、それは価値があるかもしれません <ul>

<ul> 
{% for project in profile.projects.all %} 
    <li>{{ project.name }}</li> 
{% endfor %} 
</ul> 

にこれを回し

。それは本当に便利です! ipythonをインストールして、Djangoのmanage.py shellがはるかに使いやすいようにすることをお勧めします。

シェルプロンプトで、モデルをインポートしてサンプルオブジェクトをロードすることができます(profile = mymodels.Profile.objects.get.latest('id'))。tabまたはdir()を使用してオブジェクトの属性を調べます。

+0

あなたの役に立つ答えをありがとう - あなたはこの問題を解決する方法を知っていますか? https://stackoverflow.com/questions/37847454/issues-using-angular-with-django-rest-framework-displaying-information-from-sql – Catherine