首页 > 解决方案 > Django:相关字段查找无效:​​用户

问题描述

我想根据用户主键查找练习数据。因此,当我打开 url: localhost:8080/api/practice-filter?user=1 时,它将基于 id 为 1 的用户输出所有练习数据。

模型.py

class Practice(models.Model):
    practice_id = models.BigAutoField(primary_key=True)
    user = models.ForeignKey('User', models.DO_NOTHING, default=None)
    score = models.SmallIntegerField(null=True)

    class Meta:
        managed = True
        db_table = 'practice'

    def __str__(self):
        return str(self.practice_id)

class User(models.Model):
    user_id = models.BigAutoField(primary_key=True)
    fullname = models.CharField(max_length=50)
    email = models.CharField(max_length=100)
    password = models.TextField()

    class Meta:
        managed = True
        db_table = 'user'

    def __str__(self):
        return self.fullname

视图.py

@api_view(['GET'])
def practice_filter(request):
    if request.method == 'GET':
        exercises = Practice.objects.all()
        
        user = request.GET.get('user', None)
        if user is not None:
            practice_filtered = exercises.filter(user__user__icontains=user)

        exercises_serializer = PracticeSerializer(practice_filtered, many=True)
        return JsonResponse(exercises_serializer.data, safe=False)

但是当我运行上面的代码时,我得到一个错误:

相关字段查找无效:​​用户

如何解决这个错误?我不知道该怎么办。我仍然是初学者,需要很多指导。请帮忙。谢谢你。

标签: pythondjangodjango-modelsdjango-views

解决方案


您可以使用__.

user但在用户模型中没有调用字段。

如果要按用户的全名过滤,可以这样做:

 practice_filtered = exercises.filter(user__fullname__icontains=user)

推荐阅读