微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Graphene Django:使用用户列表创建突变以创建聊天室

如何解决Graphene Django:使用用户列表创建突变以创建聊天室

我正在尝试使用 graphene-django 为此类创建此突变。我有三个模型:聊天、消息和用户。我将如何通过用户名作为突变链接用户来创建新聊天?

# Models in models.py
class BaseUser(models.Model):
    username = models.CharField(max_length=128,unique=True)
    customizable_name = models.CharField(max_length=128)

class Chat(models.Model):
    users = models.ManyToManyField(BaseUser)

    name = models.CharField(max_length=128,blank=True)
    last_message = models.DateTimeField(auto_Now=True)
    image = models.ImageField(upload_to="uploads/chat/room",blank=True,null=True)

class Message(models.Model):
    chat_fk = models.ForeignKey(Chat,on_delete=models.CASCADE,related_name="chat")
    user_fk = models.ForeignKey(BaseUser,related_name="sending_user")
    text = models.CharField(max_length=500,blank=True)
    created_time = models.DateTimeField(auto_Now_add=True)

输入schema.py


class BaseUserType(DjangoObjectType):
    class Meta:
        model = models.BaseUser
        fields = ['id','username','customizable_name','created_on']
  

class ChatType(DjangoObjectType):
    class Meta:
        model = models.Chat
        fields = ['id','users','name','last_message','image']

schema.py 中的突变

class CreateChat(graphene.Mutation):
    name = graphene.String()
    users = graphene.List(graphene.String)
    image = graphene.String()

    class Arguments:
        name = graphene.String()
        users = graphene.List(graphene.String)
        image = graphene.String()

    chat = graphene.Field(ChatType)

    def mutate(root,info,name,users,image):
        #user = []
        #for user in models.BaseUser.objects.all():
        #    models.BaseUser.objects.filter(username__in)
        chat = Chat(name = name,users = users,image = image)
        chat.save()
        
        return CreateLocation(
            id = chat.id,name = chat.name,users = chat.users,image = chat.image,)

GraphQL 上的 GraphQL

mutation createChat {
  createChat(name: "Chat",users: ["user1","user2"],image: "Image"){
    name
    users
    image
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。