请参阅django-rest-framework下拉列表中的说明?

use*_*776 2 python django python-3.x django-serializer django-rest-framework

如何在django-rest-framework下拉列表中查看主题名称?现在它只是说Subject object.

在此输入图像描述

这是我的模特:

class Subject(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    owner = models.ForeignKey('auth.User', related_name='subjects')
    code = models.CharField(max_length=50)
    name = models.CharField(max_length=50)
    description = models.CharField(max_length=50)

    class Meta:
        ordering = ('created',)

    def __unicode__(self):
        return '%s' % (self.name)

class Grade(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    owner = models.ForeignKey('auth.User', related_name='grades')

    code = models.CharField(max_length=3)
    requirements = models.CharField(max_length=200)
    ranking = models.IntegerField()

    subject = models.ForeignKey(Subject, related_name='grades', on_delete=models.CASCADE)

    class Meta:
        unique_together = ('subject', 'ranking')
        ordering = ('ranking',)

    def __unicode__(self):
        return '%d: %s' % (self.ranking, self.code)
Run Code Online (Sandbox Code Playgroud)

bak*_*kal 6

我看到你__unicode__为你的模型定义了.但是,也许你正在使用Python 3,在这种情况下Django模型,你需要定义__str____unicode__

class Subject(models.Model):
    ...

    def __str__(self):                # Use this in Python 3
        return '%s' % (self.name)
Run Code Online (Sandbox Code Playgroud)

不相关,但这是一个更简洁的回报:

    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)