![](/img/trans.png)
[英]How to limit display data based on record value using Django Rest Framework?
[英]How to display questions based on subcategory using Django Rest Framework?
我想根据子类别显示所有问题。
这是我的代码:
模型.py
class Subcategory(models.Model):
subcategory_id = models.BigAutoField(primary_key=True)
subcategory = models.CharField(max_length=40)
class Meta:
managed = True
db_table = 'subcategory'
def __str__(self):
return self.subcategory
class Question(models.Model):
question_id = models.BigAutoField(primary_key=True)
subcategory = models.ForeignKey('Subcategory', models.DO_NOTHING, default=None)
question = models.TextField()
answer = models.CharField(max_length=255)
class Meta:
managed = True
db_table = 'question'
def __str__(self):
return self.question
序列化程序.py
class SubcategorySerializer(serializers.ModelSerializer):
class Meta:
model = Subcategory
fields = ('subcategory_id',
'subcategory')
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ('question_id',
'subcategory',
'question',
'answer')
查看.py
@api_view(['GET', 'POST', 'DELETE'])
def question_list(request):
# GET list of question, POST a new question, DELETE all question
if request.method == 'GET':
questions = Question.objects.all()
question = request.GET.get('question', None)
if question is not None:
questions = questions.filter(question__icontains=question)
questions_serializer = QuestionSerializer(questions, many=True)
return JsonResponse(questions_serializer.data, safe=False)
# 'safe=False' for objects serialization
elif request.method == 'POST':
question_data = JSONParser().parse(request)
questions_serializer = QuestionSerializer(data=question_data)
if questions_serializer.is_valid():
questions_serializer.save()
return JsonResponse(questions_serializer.data, status=status.HTTP_201_CREATED)
return JsonResponse(questions_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
count = Question.objects.all().delete()
return JsonResponse({'message': '{} Questions were deleted successfully!'.format(count[0])}, status=status.HTTP_204_NO_CONTENT)
/api/子类别:
[
{
subcategory_id: 1,
subcategory: "Mathematics"
},
{
subcategory_id: 2,
subcategory: "History"
}
]
/api/问题:
[
{
question_id: 1,
subcategory: 1,
question: "10 + 10 = ?",
answer: "20"
},
{
question_id: 2,
subcategory: 1,
question: "50 + 50 = ?",
answer: "100",
},
{
question_id: 3,
subcategory: 2,
question: "Who was the first president of the United States?",
answer: "George Washington",
}
]
从上面的数据中,我有 2 个子类别数学和历史,并且有 3 个基于子类别的问题,2 个关于数学的问题和 1 个关于历史的问题。
如何在/api/questions 中只显示关于数学的 2 个问题?
我仍然是初学者,需要很多指导,请帮助。
试试这个:
subcategory = request.GET.get('subcategory', None)
if subcategory is not None:
questions = questions.filter(subcategory__subcategory__icontains=subcategory)
您必须在 URL 查询参数中传递子类别字符串:
?subcategory=Mathematics
但是,如果您希望始终仅使用Mathematics
对其进行过滤:
questions.filter(subcategory__subcategory='Mathematics')
您也可以尝试更改subcategory
的领域Subcategory
模式,只是name
来表示子目录名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.