You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Django GET请求并为Account模型添加存储Event ID的favorites字段?

1. 修改Django GET请求,根据ID列表返回对应模型实例

函数视图实现

如果用普通Django视图,可从GET参数提取ID列表,通过__in查询过滤模型实例:

from django.http import JsonResponse
from .models import YourModel  # 替换为你的实际模型类

def fetch_instances(request):
    # 从URL参数获取ID列表,格式示例:?ids=1,3,5
    raw_ids = request.GET.get('ids', '')
    # 处理参数,转为整数列表并过滤无效值
    valid_ids = [int(id_str) for id_str in raw_ids.split(',') if id_str.isdigit()]
    
    # 查询符合条件的实例
    instances = YourModel.objects.filter(id__in=valid_ids)
    
    # 序列化数据(根据你的模型字段调整返回结构)
    response_data = [
        {
            "id": obj.id,
            "name": obj.name,
            "description": obj.description
        } for obj in instances
    ]
    
    return JsonResponse(response_data, safe=False)

DRF类视图实现

如果使用Django REST Framework,继承ListAPIView并自定义get_queryset方法:

from rest_framework.generics import ListAPIView
from .models import YourModel
from .serializers import YourModelSerializer  # 替换为你的实际序列化器

class InstanceListByIDsView(ListAPIView):
    serializer_class = YourModelSerializer

    def get_queryset(self):
        raw_ids = self.request.GET.get('ids', '')
        valid_ids = [int(id_str) for id_str in raw_ids.split(',') if id_str.isdigit()]
        return YourModel.objects.filter(id__in=valid_ids)

2. 给Account模型添加收藏Event的字段

推荐方案:使用ManyToManyField(符合ORM最佳实践)

用户与活动的收藏关系是典型的多对多关系(一个用户收藏多个活动,一个活动被多个用户收藏),ManyToManyField能直接利用Django ORM的关联查询能力,避免手动维护ID列表的麻烦:

from django.db import models
from django.contrib.auth.models import AbstractUser

# 假设你的Event模型定义如下
class Event(models.Model):
    title = models.CharField(max_length=200)
    start_time = models.DateTimeField()
    # 其他活动相关字段

class Account(AbstractUser):
    # 收藏字段,related_name方便从Event反向查询收藏它的用户
    favorites = models.ManyToManyField(Event, related_name='favorited_users', blank=True)
    # 其他用户模型字段

使用示例:

  • 添加收藏:request.user.favorites.add(event_instance)
  • 取消收藏:request.user.favorites.remove(event_instance)
  • 获取用户收藏的所有活动:request.user.favorites.all()

备选方案:使用JSONField存储ID列表(不推荐)

如果因特殊需求必须存储ID列表,可使用JSONField,但需手动处理去重和关联查询:

from django.db import models
from django.contrib.auth.models import AbstractUser

class Account(AbstractUser):
    favorites = models.JSONField(default=list, blank=True)
    # 其他用户模型字段

使用示例:

  • 添加收藏:
event_id = 123  # 要收藏的Event ID
account = request.user
if event_id not in account.favorites:
    account.favorites.append(event_id)
    account.save()
  • 获取收藏的活动:
favorited_events = Event.objects.filter(id__in=request.user.favorites)

内容的提问来源于stack exchange,提问作者nicolelee8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:40:24