如何在Django Rest Framework中输出序列化数据时返回相关的字段名称?

时间:2016-04-17 06:05:26

标签: django rest django-rest-framework

我有一个模型,它有两个外键给用户和一个事件。当我保存一条消息时,我发送了一个user_id和一个event_id,但是当进行api调用时,我想返回user_name和event_name而不是它们的id。

javax.servlet.ServletException: Faces Servlet@87ee159b==javax.faces.webapp.FacesServlet,1,false
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:637)
    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:396)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871)
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedWebAppContext$JettyEmbeddedServletHandler.deferredInitialize(JettyEmbeddedWebAppContext.java:46)
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedWebAppContext.deferredInitialize(JettyEmbeddedWebAppContext.java:36)
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer.handleDeferredInitialize(JettyEmbeddedServletContainer.java:167)
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer.start(JettyEmbeddedServletContainer.java:114)
    ... 10 common frames omitted
Caused by: java.lang.IllegalStateException: Could not find backup for factory javax.faces.context.FacesContextFactory. 
    at javax.faces.FactoryFinderInstance.getFactory(FactoryFinderInstance.java:555)
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:283)
    at javax.faces.webapp.FacesServlet.init(FacesServlet.java:358)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:616)

截至目前,我有两个不同的序列化程序,第一个用于保存验证和保存消息,另一个用于获取相关的字段名称,但它似乎真的是多余的。

class Message(models.Model):

class Meta:
    db_table = 'messages'

event = models.ForeignKey(Event, verbose_name="event", on_delete=models.CASCADE)
user = models.ForeignKey(User, verbose_name="message user")
body = models.TextField(verbose_name='message')
created = models.DateTimeField(auto_now_add=True)

有没有办法可以让一个消息序列化程序接受并保存一个包含用户和事件ID的请求但返回模型的关联名称?

如果它有帮助,这是关联的视图:

class GetMessageSerializer(serializers.ModelSerializer):
    user = serializers.StringRelatedField()
    event = serializers.StringRelatedField()
    class Meta:
        model = Message
        fields = ('user', 'event', 'body')


class SaveMessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Message
        fields = ('user', 'event', 'body')

0 个答案:

没有答案