Python 如何创建带有外键的模型?

Python 如何创建带有外键的模型?,python,django,sockets,swampdragon,Python,Django,Sockets,Swampdragon,我正在使用创建聊天演示,我不确定如何创建带有相关字段的模型 使用下面的代码,每次调用javascript中的createMessage函数时都会发生错误。我收到的唯一错误来自websocket输出:c[3001,“连接中止”]。python控制台上没有任何输出可以解释这个错误 有人能帮我理解如何创建一条消息,相关字段为用户 型号: 序列化程序: 路线: Javascipt: 要求 django==1.7.6 沼泽龙==0.4.1.2 沼泽龙认证==0.1.3 回答我自己的问题:这并不像我预期的

我正在使用创建聊天演示,我不确定如何创建带有相关字段的模型

使用下面的代码,每次调用javascript中的
createMessage
函数时都会发生错误。我收到的唯一错误来自websocket输出:
c[3001,“连接中止”]
。python控制台上没有任何输出可以解释这个错误

有人能帮我理解如何创建一条
消息
,相关字段为
用户

型号: 序列化程序: 路线: Javascipt: 要求
  • django==1.7.6
  • 沼泽龙==0.4.1.2
  • 沼泽龙认证==0.1.3

    • 回答我自己的问题:这并不像我预期的那样内置到框架中。您需要在
      get\u initial
      方法中实例化路由器中的相关模型。然后,这些将被传递到序列化程序,并将正确创建
      消息
      模型

      路线 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)
      
      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', )
      
      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)
      
      ...
        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);
          });
        },
      ...
      
      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()
      
      ...
        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);
          });
        },
      ...
      
      class MessageSerializer(ModelSerializer):
          user = UserSerializer
      
          class Meta:
              model = b'chat.Message'
              publish_fields = ('body', 'user', )
              update_fields = ('body', )