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

如何将Django中存入数据库的收藏房产数据改为存储到session中

代码调整方案

1. 视图函数(views.py)修改

原来的逻辑是操作Favorito数据库表,调整后直接将收藏的房产ID存储到用户session中,代码如下:

import json
from .models import Inmueble

def updateFavoritos(request):
    # 初始化session中的收藏ID列表,首次访问时创建空列表
    if 'favoritos_ids' not in request.session:
        request.session['favoritos_ids'] = []
    
    inmuebleId = None
    if request.body:
        data = json.loads(request.body)
        inmuebleId = str(data['id'])
        # 避免重复添加同一房产
        if inmuebleId not in request.session['favoritos_ids']:
            request.session['favoritos_ids'].append(inmuebleId)
            # 标记session已修改,强制Django保存更新
            request.session.modified = True
    
    # 查询所有已收藏的房产对象传给模板
    favs = Inmueble.objects.filter(id__in=request.session['favoritos_ids'])
    contexto = {
        'id': inmuebleId,
        'favoritos': favs,
    }
    return render(request, 'favorites.html', contexto)

2. HTML模板调整

因为现在传递给模板的favoritos是直接查询出来的Inmueble房产对象,不需要再通过inmueble外键关联取值,所以需要把模板中所有favorito.inmueble前缀修改为favorito,同时调整删除按钮的逻辑:

{% for favorito in favoritos %}
<div class="col-lg-6 col-xl-4">
  <div class="feat_property">
        <div class="thumb">
        <!-- 修改点:去掉.inmueble后缀 -->
        <img class="img-whp" src="{{ favorito.imagen.url }}" alt="fl1.jpg">
        
        <div class="thmb_cntnt2">
            <ul class="listing_gallery mb0">
            <li class="list-inline-item"><a class="text-white" href="#"><span class="flaticon-photo-camera mr5"></span> 22</a></li>
            <li class="list-inline-item"><a class="text-white" href="#"><span class="flaticon-play-button mr5"></span> 3</a></li>
            </ul>
        </div>
        </div>
        <div class="details">
        <div class="tc_content">
            <!-- 修改点:去掉.inmueble后缀 -->
            <h4><a href="page-listing-single-v8.html">{{ favorito.nombre }}</a></h4>
            <p>251 SW 6th Ln Florida City, FL</p>
            <ul class="prop_details mb0">
            <li class="list-inline-item"><a href="#"><span class="flaticon-bed"></span> <br>4 Cuartos</a></li>
            <li class="list-inline-item"><a href="#"><span class="flaticon-bath"></span> <br>5 Baños</a></li>
            <li class="list-inline-item"><a href="#"><span class="flaticon-car"></span> <br>1 Garage</a></li>
            <li class="list-inline-item"><a href="#"><span class="flaticon-ruler"></span> <br>1200 M2</a></li>
            </ul>
        </div>
        <div class="fp_footer">
            <ul class="fp_meta float-left mb0">
            <li class="list-inline-item">
                <a href="#">
                <small><del class="body-color">$2,800/mo</del></small><br>
                <span class="heading-color fw600">$2,300/mo</span>
                </a>
            </li>
            </ul>
            <ul class="fp_meta float-right mb0">
            <li class="list-inline-item"><a class="icon" href="#"><span class="flaticon-resize"></span></a></li>
            <li class="list-inline-item"><a class="icon" href="#"><span class="flaticon-add"></span></a></li>
            <li class="list-inline-item">
              <!-- 删除链接改为传递房产ID,对应修改删除视图逻辑即可 -->
              <a href="{% url 'eliminar' favorito.id %}"><button class="btn btn-outline-danger">Borrar</button></a>
            </li>
            </ul>
        </div>
    </div>
  </div>
</div>
{% endfor %}

3. 删除功能适配

原来的删除视图是删除Favorito表的记录,调整后只需要将对应房产ID从session的favoritos_ids列表中移除即可,示例代码如下:

def eliminar_favorito(request, inmueble_id):
    if 'favoritos_ids' in request.session:
        inmueble_id = str(inmueble_id)
        if inmueble_id in request.session['favoritos_ids']:
            request.session['favoritos_ids'].remove(inmueble_id)
            request.session.modified = True
    # 重定向回收藏列表页
    return redirect('favoritos_list')

注意事项

  • 默认创建的Django项目都会在INSTALLED_APPS和MIDDLEWARE中配置好session相关组件,无需额外修改即可正常使用
  • session存储的收藏数据仅对应当前用户的浏览器会话,清除浏览器缓存、更换设备或会话过期后收藏数据会丢失
  • 如果需要持久化存储收藏数据,还是建议保留数据库存储方案

内容的提问来源于stack exchange,提问作者erick sanchez vital

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:06:01