以下のクエリ(query1)に基づいてdjangoシェルで以下の結果(result1)を返すモデル(model.py)があり、正常に動作します。私の目的はDjango Rest APIを使って同じクエリーセットを返すことですが、これを実現するためにクラスへのシリアライズの操作方法はわかりません。私は、それぞれのユーザー、この場合はラントター、各タスクを返すことができなくなっています。下のビュークラス(view1.py)と私の現在のシリアライズクラス(serialize.py)に基づいて、これまでの結果(result2)を返すことができました。任意の助けを大幅Django RESTフレームワークを使用してManyToManyとForeignKeyの関係をシリアル化する方法
model.py
class Task(models.Model):
task_name = models.CharField(max_length=200)
def __str__(self):
return self.task_name
@python_2_unicode_compatible # only if you need to support Python 2
class Space(models.Model):
space_name = models.CharField(max_length=200)
task = models.ManyToManyField(Task)
def __str__(self):
return str(self.space_name)
@python_2_unicode_compatible # only if you need to support Python 2
class Room(models.Model):
building = models.ForeignKey(Building, on_delete = models.CASCADE)
room_name = models.CharField(max_length=200)
rmfloor_name = models.ForeignKey(Floor, on_delete = models.CASCADE)
sqfootage = models.IntegerField()
spacetype = models.ForeignKey(Space, on_delete = models.CASCADE)
barcode_name = models.CharField(max_length=100)
def __str__(self):
return self.room_name
@python_2_unicode_compatible # only if you need to support Python 2
class Schedule(models.Model):
building = models.ForeignKey(Building, on_delete = models.CASCADE)
schedule_name = models.CharField(max_length=200)
user = models.ForeignKey(User)
def __str__(self):
return self.schedule_name
Query1を
s1 = Schedule.objects.get(pk=1)
r1 = Room.objects.get(pk=2)
sp1 = r1.spacetype.pk
s = Space.objects.get(pk = sp1)
task_queryset = s.task.all()
for tq in task_queryset:
print tq.pk, tq.task_name, x.schedule.user.username
結果1
1 Remove large debris from floor rhunter
2 Clean walls and horizontal surfaces rhunter
3 Clean touch points rhunter
4 Empty trash container rhunter
6 Spot clean desks/furniture rhunter
7 High/Low dust rhunter
view1.py
class TaskListMixin(object):
s1 = Schedule.objects.get(pk=1)
r1 = Room.objects.get(pk=2)
sp1 = r1.spacetype.pk
s = Space.objects.get(pk = sp1)
queryset = s.task.all()
serializer_class = SimpleSerializer3
permission_classes = (permissions.IsAuthenticated,)
class TaskListViewSet(TaskListMixin, generics.BulkModelViewSet):
pass
を理解されるであろう
serialize.py
class SimpleSerializer3(BulkSerializerMixin, ModelSerializer):
class Meta(object):
model = Task
list_serializer_class = BulkListSerializer
fields = ('pk', 'task_name')
はresults2
[
{
"pk": 1,
"task_name": "Remove large debris from floor"
},
{
"pk": 2,
"task_name": "Clean walls and horizontal surfaces"
},
{
"pk": 3,
"task_name": "Clean touch points"
},
{
"pk": 4,
"task_name": "Empty trash container"
},
{
"pk": 6,
"task_name": "Spot clean desks/furniture"
},
{
"pk": 7,
"task_name": "High/Low dust"
}
]