我想在我当前的项目中实现Web推送通知,我希望通知只发送到当前登录的会话(即设备).
因此,我对我的Subscription
型号的定义如下:
class Subscription(models.Model):
device = models.CharField(max_length=100)
session = models.OneToOneField('sessions.Session', on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
info = models.JSONField()
以及保存订阅的查看功能:
SubscriptionForm = model form_factory(Subscription, fields=['device', 'info'])
@login_required
@require_POST
def subscr_view(request):
form = SubscriptionForm(request.POST)
if form.is_valid():
form.instance.session = request.session.model
form.instance.user = request.user
subscr = form.save()
return JsonResponse({'subscription': subscr.id}, status=201)
return JsonResponse({'errors': list(form.errors.keys())})
然而,当我保存表单时,Django抱怨Session属性:
ValueError: Cannot assign "<class 'django.contrib.sessions.models.Session'>": "Subscription.session" must be a "Session" instance.
如何正确设置会话属性?