django - 如何在 django restframework 中过滤多对多字段值
问题描述
我正在尝试从模型中查询值,我想在查询中包含 manytomanyfield 值,但现在我得到一些数字而不是值,我在 views.py 文件中使用 modelviewset。
我知道做错了什么,如何以正确的方式做到这一点
模型.py
class TrainingDetailsViewSet(viewsets.ModelViewSet):
queryset = TrainingDetails.objects.all().order_by('Name')
serializer_class = TrainingDetailsSerializer
视图.py
class TrainingDetails(models.Model):
Code = models.CharField(max_length=60)
Name = models.CharField(max_length=60)
TrainerName = models.ManyToManyField(TrainerDetails, blank=True, related_name='trainer')
Agenda = models.FileField()
Date = models.ManyToManyField(Date,blank=True, editable= True, related_name='date')
Data = models.ManyToManyField(TrainingData, blank=True, related_name='data')
def __str__(self):
return self.Name
序列化程序.py
class TrainingDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = TrainingDetails
fields = ('Code', 'Name', 'TrainerName', 'Agenda' , 'Date' , 'Data' )
我正在回应,
[
{
"Code": "TRA123",
"Name": "something",
"TrainerName": [
5,
6
],
"Agenda": "something",
"Date": [
2
],
"Data": [
2
]
}
]
我想,
[
{
"Code": "TRA123",
"Name": "something",
"TrainerName": [
'john' , 'james'
],
"Agenda": "something",
"Date": [
'19/10/2020'
],
"Data": [
'something'
]
}
]
``
解决方案
您正在寻找StringRelatedField,例如:
class TrainingDetailsSerializer(serializers.ModelSerializer):
TrainerName = serializers.StringRelatedField(many=True)
class Meta:
model = TrainingDetails
fields = ('Code', 'Name', 'TrainerName', 'Agenda' , 'Date' , 'Data' )
应该注意StringRelatedField
的是,查找__str__
相关模型的 ,在您的情况下是TrainerDetails
.
推荐阅读
- r - 如何删除变量中的部分重复信息,但在字段之间重复
- ruby-on-rails - Canvas LMS 非常缓慢并且耗尽了 CPU 周期。可能是什么原因,如何解决?
- c++ - 如何使 LLDB 在 MacOS 上的 CLion 中与 STL 一起工作,正如我在 Linux 上所期望的那样
- wordpress - 有没有办法手动触发 WordPress 的心跳
- optimization - 在 NN 中对输入层的权重施加约束
- angular - Angular 11 无法路由到命名出口
- php - Codeigniter Joins:基于连接查询的结果格式
- jquery - 在jquery中获取给定月份的最后一天
- python - 使用队列实现 Kafka 生产者消费者聊天
- javascript - 以最低的变化索引从下到上对数组进行排序