Django项目Event活动邀请功能无法正确识别目标对象问题咨询
问题根因
- 原始视图函数仅接收一个
id参数,同时用该值查询活动实例和受邀用户实例,必然导致活动ID和受邀用户ID完全一致,所以会把邀请错发给和活动ID相同的用户,多数场景下就是活动创建者本人。 - 原始代码中
get_or_create方法错误传入了request作为第一个参数,该方法仅需传入筛选用的关键字参数,多余参数会触发运行报错。
修复方案
你后续的调整思路是正确的,完整修复需要做两处修改:
- 拆分视图参数,同时传入活动ID和受邀用户ID,同步调整URL路由配置
- 修正
get_or_create的错误传参,优化后代码如下:
# 视图函数 def from_event_to_user_invite_request(request, event_id, profile_id): event = Event.objects.get(id=event_id) to_profile = Profile.objects.get(id=profile_id) # 移除多余的request参数,仅传入筛选条件 event_invite, created = EventInviteRequest.objects.get_or_create( from_event=event, to_profile=to_profile ) return redirect('events:event_page', event.id)
# 对应urls.py路由配置调整示例 urlpatterns = [ # 其他路由不变,新增如下配置,替换原有单参数路由 path('event/invite/<int:event_id>/<int:profile_id>/', from_event_to_user_invite_request, name='send_event_invite'), ]
可选优化建议
- 增加权限校验:调用接口前先判断当前登录用户是否为活动创建者,避免任意用户都可以发起活动邀请
- 增加联合唯一约束:在
EventInviteRequest模型中增加from_event和to_profile的联合唯一约束,避免同一个活动向同一个用户重复发送邀请:
class EventInviteRequest(models.Model): # 原有字段保持不变 class Meta: constraints = [ models.UniqueConstraint(fields=['from_event', 'to_profile'], name='unique_event_to_user_invite') ]
内容的提问来源于stack exchange,提问作者Saviola
相关产品推荐
相关产品推荐

