gpt4 book ai didi

python - 如何使用 SwampDragon 创建带有外键的模型?

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:19 24 4
gpt4 key购买 nike

我正在使用 SwampDragon 创建聊天演示而且我不确定如何创建具有相关字段的模型。

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

谁能帮我理解如何创建一个Message,以及User的相关字段?

型号:

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)

Javascipt:

...
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-auth==0.1.3

最佳答案

回答我自己的问题:这并没有像我预期的那样内置到框架中。您需要在get_initial 方法中实例化路由器中的相关模型。然后这些将被传递给序列化程序并正确创建 Message 模型。

路线

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

...
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', )

关于python - 如何使用 SwampDragon 创建带有外键的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29047978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com