小编Ara*_*ier的帖子

使用 Django Channels 立即发送消息

我有一个长时间运行的操作,该操作是由来自 websocket 的消息启动的,我希望我的服务器向客户端发送确认操作何时开始和何时结束。

这本质上与这个问题相同,但没有有用的答案。我尝试过,await self.send(data, immediately=True)但收到错误,因为它似乎immediately不再受支持,或者在异步版本或其他版本中不起作用。

我真的不想在设置通道层和 Redis 上浪费时间,并且还需要配置另一件事,这将不可避免地破坏,或者更糟糕的是,必须在 WSL 中设置 Celery 并处理在单独的 VM 中进行的所有测试。如果仅使用 Channels 无法做到这一点,我对此非常满意,因此无需解释如何使用第三方库进行设置(如果您认为其他人可能会发现它有用,请务必继续)。

python django websocket django-channels

6
推荐指数
0
解决办法
633
查看次数

Django Rest Framework:验证序列化器时如何忽略“唯一”主键约束?

我试图在 PostgreSQL 数据库中存储大量的交通数据,其中客户端一次上传多条记录(数万条)。我只想要每个站点、每条路线、每次行程的一个到达时间,并且该站点、路线和行程的唯一标识符是我的表的主键(以及不同表中的外键)。我正在尝试在序列化器中使用 Django 的 update_or_create 来创建该到达时间的条目,或者使用最新数据更新到达时间(如果已存在)。不幸的是,在我的序列化器上调用 is_valid() 时,它识别出重复记录违反了主键的唯一性约束(这是有道理的),并给出了以下错误消息:

'real_id': [ErrorDetail(string='actual with this real id already exists.', code='unique')]
Run Code Online (Sandbox Code Playgroud)

我想覆盖此行为,因为如果主键不唯一,它只会更新条目。我已经尝试过循环并删除验证器,如下所示:

    def run_validators(self, value):
        for validator in self.validators:
            self.validators.remove(validator)
        super(ActualSerializer, self).run_validators(value)
Run Code Online (Sandbox Code Playgroud)

我还尝试使用extra_kwargs序列化器元类的字段删除所有验证器,如下所示:

extra_kwargs = {
            'name': {'validators': []}
        }
Run Code Online (Sandbox Code Playgroud)

我真的不想在我的视图中进行插入,因为理想情况下序列化器正在解析值并验证其他约束。

但这些解决方案都没有改变任何事情。我找不到任何其他可以解决我的问题的东西(但如果有人找到我错过的答案,那将是天赐之物)。我认为我的问题与这个问题有点相似,但那个问题没有一个好的答案。

作为参考,我的序列化器文件:

from .models import Future, Actual
from rest_framework import serializers


class ActualSerializer(serializers.ModelSerializer):

    def create(self, validated_data):
        actual, created = Actual.objects.update_or_create(
            real_id=validated_data['real_id'],
            defaults={'arrival': validated_data.get('arrival', None)}
        )
        return actual

    class Meta:
        model = Actual
        fields = ['real_id', 'arrival']


class FutureSerializer(serializers.ModelSerializer): …
Run Code Online (Sandbox Code Playgroud)

python database django postgresql django-rest-framework

5
推荐指数
1
解决办法
4929
查看次数