
1、问题背景
在开发一个拍卖网站模型时,需要解决以下问题:
- 每个学生只能对每个物品出价一次。
- 每个学生可以看到自己对每个物品的出价。
- 每个学生可以在一定时间内修改自己的出价。
为了实现这些功能,需要在 Bid 模型中添加一个字段来标识出价人。可以选择使用完整的用户模型,但这样会增加实现的复杂性。也可以使用 CharField 来存储出价人标识, 但这无法防止学生通过创建多个出价人标识来多次出价。
2、解决方案
可以使用 Django 的 session 来实现出价人标识。Session 是一个存储在服务器端的临时数据,可以用来存储用户的相关信息。每个用户都有自己的 session,因此可以使用 session 来标识出价人。
以下是实现步骤:
- 在 Bid 模型中添加一个 CharField 字段 bidderid。
- 在 Bid 模型的 save 方法中,将 bidderid 设置为 request.session.session_key。
- 在 views.py 中,在创建 Bid 实例之前,先检查 request.session.session_key 是否存在。如果不存在,则创建一个新的 session。
- 在模板中,使用 {% if user.is_authenticated %} 来判断用户是否已登录。如果已登录,则显示用户的出价记录。如果没有登录,则显示一个表单,让用户输入姓名。
- 在处理表单时,将用户输入的姓名存储在 SessionName 模型中。
- 在 views.py 中,在创建 Bid 实例之前,先检查 SessionName 模型中是否存在与 request.session.session_key 对应的记录。如果存在,则将 bidderid 设置为该记录的 chosenname 字段的值。
这样,就可以实现每个学生只能对每个物品出价一次,并且每个学生可以看到自己对每个物品的出价,还可以修改自己的出价。
代码示例:
from django.db import models
from django.contrib.sessions.models import Session
class Lot(models.Model):
name = models.CharField(max_length=200)
description = models.TextField()
openforbids = models.<

1122

被折叠的 条评论
为什么被折叠?



