2016-08-29 3 views
0

Django Rest Frameworkdrf-nested-routersアプリケーションを使用してAPIを作成しています。このアプリケーションは、ユーザーがセッションとタスクを持つトラッカーです。各ユーザーは3つのアクティブなタスクを持つことができ、特定のセッションでこれらの各タスクを処理できます。Django drf-nested-routers - モデルオブジェクトに帰属関連フィールドがありません

マイ(省略)のモデルは以下のとおりです。

#models.py 
class User(models.Model): 
    name = models.Charfield() 

class Task(models.Model): 
    start_date = models.Datefield() 
    task_title = models.Charfield() 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 

class Session(models.Model): 
    session_date = models.Datefield() 
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sessions') 
    task_one = models.ForeignKey(related_name="task_one") 
    task_one_attempts = models.IntegerField() 
    task_two = models.ForeignKey(related_name="task_two") 
    task_two_attempts = models.IntegerField() 

私はこれらのモデルについては、以下の(省略)シリアライザを作成しました:

#serializers.py 
class TaskSerializer(serializers.ModelSerializer): 
    user = serializers.StringRelatedField(many=False) 

    class Meta: 
     model = Task 
     fields = ('start_date', 'task_title', 'user') 

class SessionSerializer(serializers.ModelSerializer): 
     user = Serializers.StringRelatedField(many=False) 

     class Meta: 
      model = Session 
      fields = ('session_date', 'user', 'task_one', 'task_one_attempts', 'task_two', 'task_two_attempts') 

class UserSerializer(models.ModelSerializer): 
    sessions = SessionSerializer(many=True) 
    tasks = TaskSerializer(many=True) 
    sessions = SessionSerializer(many=True) 

    class Meta: 
     model = Users 
     fields = ('name', 'sessions', 'tasks') 

私はまた私のviews.pyとurls.pyセットを持っていますルーティングを正しく実行する

私は、セッションとタスクのAPIビューにうまく行くことができます。しかし、私は、ユーザービューに移動しようとするたび、それは次のようなエラーがスローされます。

'User' object has no attribute 'tasks'. 

本当に面白い何、しかし、私は「タスク」を削除し、ちょうどセッションが含まれている場合、それはすべてがうまくシリアライズということで、ユーザーのさまざまなセッションをネストして表示します。

私はここで迷っており、助けていただければ幸いです。

答えて

1

私はそれを私の妻とゴムで噛みしめ、私の問題を理解しました。

私はforeignKeyフィールドにmodels.pyの 'related_name = "sessions"を持っていました。

タスクモデルのForeignKeyフィールドにその情報がありませんでした。

うまくいけば、他の誰かがこれに遭遇し、私の間違いから学ぶことができます。

関連する問題