2016-12-02 9 views
1

Django Rest Frameworkの学習を始め、Django restフレームワークを使用して簡単なAPIを作成しようとしています。Django RestフレームワークのForeignkeyフィールドの動的選択

これは私のmodels.py

from __future__ import unicode_literals 
from django.db import models 

class Student(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    name = models.CharField(max_length=150, blank=False) 
    student_id = models.CharField(max_length=20, primary_key=True) 
    father_name = models.CharField(max_length=150) 
    mother_name = models.CharField(max_length=150) 

    class Meta: 
     ordering = ('student_id',) 


class Subject(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    subject_id = models.CharField(max_length=20, primary_key=True) 
    name = models.CharField(max_length=150) 

    class Meta: 
     ordering = ('subject_id',) 


class Result(models.Model): 
    created = models.DateTimeField(auto_now_add=True) 
    grade = models.DecimalField(max_digits=5, decimal_places=3, blank=False) 
    student_id = models.ForeignKey(Student, on_delete=models.CASCADE) 
    subject_id = models.ForeignKey(Subject, on_delete=models.CASCADE) 

    class Meta: 
     ordering = ('created',) 

であり、これは私のserializers.py私の "結果" モデルでは

from rest_framework import serializers 
from models import * 


class StudentSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Student 
     fields = ('student_id', 'name', 'father_name', 'mother_name') 


class SubjectSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Subject 
     fields = ('subject_id', 'name') 


class ResultSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Result 
     fields = ('grade', 'student_id', 'subject_id') 

ですが、私は2つの外部キーを持っています。 student_idとsubject_id。 、どのように私は、「学生のオブジェクト」と「サブジェクトオブジェクト」を示すの代わりにドロップダウンメニューで「名前」フィールドを表示することができている

enter image description here

私の質問:これは、それがどのように見えるかですか?

私は、モデルの「選択肢=」フィールドに

STUDENT_CHOICES = [(each.student_id, each.name) for each in Student.objects.all()] 
SUBJECT_CHOICES = [(each.subject_id, each.name) for each in Subject.objects.all()] 

で試してみましたが、それはうまくいきませんでした。

ありがとうございます。

答えて

1

私はあなたがDRFのドキュメントthis partを探していると思います。

基本的に、あなたのDjangoモデル自身の表現が使用されます。だから、例えば、あなたが__str__メソッドを追加することができますStudentモデルに:Djangoのための

# this is for Python 3, use __unicode__ on Python 2 
def __str__(self):   
    return self.name 

メタオプションのマニュアルをmodel methodsを探し、hereです。

+0

ありがとうございました。それは働いた:D –

+0

あなたは大歓迎です:) –

関連する問題