首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SwampDragon创建外键模型?

如何使用SwampDragon创建外键模型?
EN

Stack Overflow用户
提问于 2015-03-14 10:41:01
回答 1查看 400关注 0票数 2

我正在使用SwampDragon创建一个聊天演示程序,我不知道如何创建一个包含相关字段的模型。

使用下面的代码,每次我在javascript中调用createMessage函数时都会发生错误。我收到的唯一错误是来自websocket输出:c[3001,"Connection aborted"]。python控制台上没有输出来说明这个错误。

有人能帮助我理解如何使用相关的Message字段User创建User吗?

型号:

代码语言:javascript
复制
from django.contrib.auth.models import User
from django.db import models

from swampdragon.models import SelfPublishModel

from .serializers import MessageSerializer


class Message(SelfPublishModel, models.Model):
    serializer_class = MessageSerializer

    user = models.ForeignKey(User, related_name='messages')
    body = models.TextField(blank=True)

序列化器:

代码语言:javascript
复制
from swampdragon.serializers.model_serializer import ModelSerializer
from django.contrib.auth.models import User


class UserSerializer(ModelSerializer):

    class Meta:
        model = User
        publish_fields = ('id', 'username')
        update_fields = ('first_name', 'last_name', )


class MessageSerializer(ModelSerializer):
    user = UserSerializer

    class Meta:
        model = b'chat.Message'
        publish_fields = ('body', 'user', )
        update_fields = ('body', 'user', )

路由:

代码语言:javascript
复制
from swampdragon import route_handler
from swampdragon.route_handler import ModelRouter, BaseRouter

from .models import Message
from .serializers import MessageSerializer, UserSerializer


class MessageRouter(ModelRouter):
    route_name = 'message'
    serializer_class = MessageSerializer
    model = Message
    include_related = [UserSerializer, ]

    def get_object(self, **kwargs):
        return self.model.objects.get(pk=kwargs['id'])

    def get_query_set(self, **kwargs):
        return self.model.objects.all()

route_handler.register(MessageRouter)

Javascipt:

代码语言:javascript
复制
...
  createMessage: function(message){
    var data = {
      user: 1,
      body: message
    };
    swampdragon.create('message', data, function (context, data) {
       console.log('MessageStore: onCreate success.', context, data);
    }, function (context, data) {
      console.log('MessageStore: onCreate failed.', context, data);
    });
  },
...

要求

  • django==1.7.6
  • SwampDragon==0.4.1.2
  • SwampDragon=0.1.3
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-15 11:36:22

回答我自己的问题:这不是我所期望的框架。您需要在get_initial方法中实例化路由器中的相关模型。然后将它们传递给序列化程序,并正确地创建Message模型。

路由

代码语言:javascript
复制
class MessageRouter(ModelRouter):
    route_name = 'message'
    serializer_class = MessageSerializer
    model = Message
    include_related = [UserSerializer, ]

    def get_initial(self, verb, **kwargs):
        user = User.objects.get(pk=kwargs['user_id'])
        return {'user': user}

    def get_object(self, **kwargs):
        return self.model.objects.get(pk=kwargs['id'])

    def get_query_set(self, **kwargs):
        return self.model.objects.all()

Javascript

代码语言:javascript
复制
...
  createMessage: function(message){
    var data = {
      user_id: 1,
      body: message
    };
    swampdragon.create('message', data, function (context, data) {
       console.log('MessageStore: onCreate success.', context, data);
    }, function (context, data) {
      console.log('MessageStore: onCreate failed.', context, data);
    });
  },
...

串行器

代码语言:javascript
复制
class MessageSerializer(ModelSerializer):
    user = UserSerializer

    class Meta:
        model = b'chat.Message'
        publish_fields = ('body', 'user', )
        update_fields = ('body', )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29047978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档