【问题标题】:Django drf-nested-routers - model object has no attributed related fieldDjango drf-nested-routers - 模型对象没有属性相关字段
【发布时间】:2016-08-29 01:38:19
【问题描述】:

我正在使用drf-nested-routers 应用程序为Django Rest Framework 创建一个API。此应用程序是一个跟踪器,用户可以在其中进行会话和任务。每个用户可以拥有三个活动任务,并且可以在给定会话中处理这些任务中的每一个。

我的(缩写)模型是:

#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'.

不过,真正有趣的是,如果我删除“任务”并仅包含会话,它会很好地序列化所有内容,并为我提供用户各种会话的嵌套视图。

我在这里不知所措,希望得到任何帮助。

【问题讨论】:

    标签: python django django-rest-framework drf-nested-routers


    【解决方案1】:

    我和我的妻子一头雾水,发现了我的问题。

    我在 models.py 中的用户 ForeignKey 字段中有“related_name="sessions"'。

    我在任务模型的 ForeignKey 字段中缺少该信息。

    希望其他人偶然发现这一点,并能从我的错误中吸取教训。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-07
      • 2020-11-15
      • 1970-01-01
      • 2018-03-11
      • 2020-07-03
      • 1970-01-01
      • 2015-11-24
      • 2018-10-29
      相关资源
      最近更新 更多