
在开发一个拍卖网站模型时,需要解决以下问题:
为了实现这些功能,需要在 Bid 模型中添加一个字段来标识出价人。可以选择使用完整的用户模型,但这样会增加实现的复杂性。也可以使用 CharField 来存储出价人标识, 但这无法防止学生通过创建多个出价人标识来多次出价。
可以使用 Django 的 session 来实现出价人标识。Session 是一个存储在服务器端的临时数据,可以用来存储用户的相关信息。每个用户都有自己的 session,因此可以使用 session 来标识出价人。
以下是实现步骤:
这样,就可以实现每个学生只能对每个物品出价一次,并且每个学生可以看到自己对每个物品的出价,还可以修改自己的出价。
代码示例:
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.BooleanField(default=False)
def __unicode__(self):
return u'%s' % self.name
class Bid(models.Model):
lot = models.ForeignKey('Lot')
amount = models.FloatField()
bidderid = models.CharField(max_length=255)
def __unicode__(self):
return u'Bid on lot %d' % self.lot
def save(self, *args, **kwargs):
if not self.bidderid:
self.bidderid = request.session.session_key
super(Bid, self).save(*args, **kwargs)
class SessionName(models.Model):
sessionid = models.CharField(max_length=255)
chosenname = models.CharField(max_length=255)在 views.py 中:
def create_bid(request):
if not request.session.session_key:
request.session.create()
if request.method == 'POST':
form = BidForm(request.POST)
if form.is_valid():
bid = form.save(commit=False)
session_name = SessionName.objects.get(sessionid=request.session.session_key)
bid.bidderid = session_name.chosenname
bid.save()
return redirect('bid_list')
else:
form = BidForm()
return render(request, 'bid_form.html', {'form': form})在模板中:
{% if user.is_authenticated %}
{% for bid in bids %}
{{ bid.lot.name }}: {{ bid.amount }}
{% endfor %}
{% else %}
<form action="{% url 'create_bid' %}" method="post">
{% csrf_token %}
<input type="text" name="name" placeholder="Your name">
<input type="submit" value="Submit">
</form>
{% endif %}…
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。