<blockquote>
<p>I want to hide specific fields of a model on the list display at <strong><code>persons/</code></strong> and show all the fields on the detail display <strong><code>persons/jane</code></strong></p>
</blockquote>
<p>我对rest框架还比较陌生,文档感觉很难掌握。</p>
<p>这就是我想要完成的。</p>
<p>我有一个简单的模型</p>
<pre><code># model
class Person(models.Model):
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
nickname = models.CharField(max_length=20)
slug = models.SlugField()
address = models.TextField(max_length=300, blank=True)
</code></pre>
<p>以及序列化程序类</p>
<pre><code># serializers
class PersonListSerializer(serializers.ModelSerializer):
class Meta:
model = Person
fields = ('nickname', 'slug')
class PersonSerializer(serializers.ModelSerializer):
class Meta:
model = Person
fields = ('first_name', 'last_name', 'nickname', 'slug', 'address')
</code></pre>
<p>以及视图集。</p>
<pre><code># view sets (api.py)
class PersonListViewSet(viewsets.ModelViewSet):
queryset = Person.objects.all()
serializer_class = PersonListSerializer
class PersonViewSet(viewsets.ModelViewSet):
queryset = Person.objects.all()
serializer_class = PersonSerializer
</code></pre>
<p>在url<strong><code>persons</code></strong>处,我想显示人员列表,只显示字段<code>nickname</code>和<code>slug</code>,在url<strong><code>persons/[slug]</code></strong>处,我想显示模型的所有字段。</p>
<p>我的路由器配置</p>
<pre><code>router = routers.DefaultRouter()
router.register(r'persons', api.PersonListViewSet)
router.register(r'persons/{slug}', api.PersonViewSet)
</code></pre>
<p>我想第二种配置是错误的,我怎样才能达到我想要做的呢?</p>
<p><strong>更新:</strong></p>
<p><strong><code>persons/slug</code></strong>的输出是<code>{"detail":"Not found."}</code>,但它适用于<strong><code>person/pk</code></strong></p>
<p>谢谢你</p>