问一个 django 编辑信息扣除相应用户积分的问题
class EditTopicForm(forms.ModelForm): def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) self.topic_id = kwargs.pop('topic_id', None) #以上两条语句取不到相应的值 super(EditTopicForm, self).__init__(*args, **kwargs) class Meta: model = Topic #fields = "__all__" fields = ['title', 'body', 'ys_t','is_cuti'] def save(self, commit=True): inst = super(EditTopicForm, self).save() if inst.is_cuti: inst.author.levels -= 2 inst.author.save(update_fields = ['levels']) if inst.ys_t: inst.author.levels -= 2 inst.author.save(update_fields = ['levels']) return inst
本意是用户发布信息后,编辑信息时如果给标题“加粗”,变“颜色”时就会扣除用户积分 2,如果不做此操作的话就不扣除积分
问题是如果用户本身就已经“加粗”或变颜色了。那再编辑信息只改其它如标题或内容时,这样的情况就不再扣积分了。
如上面代码只要编辑信息就会扣除相应的积分。
我现在想到的办法:
def save()
里实现。就是先取到修改前信息的 is_cuti
、ys_t
字段的值跟修改后的值做比较后再决定是否执行扣积分问题现在不知道怎么先取到修改前的值? 如上面所示代码都是取到的修改后的值。
在构造函数里 __init__
里取不到东西。也可能我写的代码不对
不知道哪位朋友有什么方法能实现这个功能吗?
多谢了
可以简单理解为,怎么将这个操作做成一个幂等操作
。
用户对内容(cid)可以随便编辑,当触发某个操作(op)时,扣减积分。是否清除之后,会恢复积分?
将 cid + op
作为一个唯一值,每次扣减时,判断下是否存在(已扣减过),没有则扣减并新增一条扣减记录。当然这属于一个事务。
同时,还可以将这个数据冗余至 内容
中,比如xx_is_cuti
和 xx_ys_t
当这个内容发生过扣减就置为1。每次扣减时判断是否为1?
也就是 将扣减状态持久化下来,并与具体内容做关联。不容易出错,同时也比较好回溯
要在Django中实现根据编辑信息的内容扣除用户积分的功能,并且只在信息的内容有所改变(比如标题加粗或变色)时才扣除积分,你可以通过比较编辑前后的模型字段值来决定是否扣分。
首先,你需要获取到编辑前的Topic实例的is_cuti
和ys_t
字段的值。这通常意味着在编辑操作之前,你需要先从数据库中检索出原始的Topic对象。
这里有一个简单的实现方法:
save
方法中,比较原始对象和即将保存的对象之间的is_cuti
和ys_t
字段的值。以下是一个简化的示例代码:
视图(views.py):
from django.shortcuts import get_object_or_404, renderfrom .models import Topicfrom .forms import EditTopicFormdef edit_topic(request, topic_id): topic = get_object_or_404(Topic, pk=topic_id) if request.method == 'POST': form = EditTopicForm(request.POST, instance=topic, user=request.user) if form.is_valid(): original_is_cuti = topic.is_cuti original_ys_t = topic.ys_t topic = form.save() # 比较原始值和保存后的值 if topic.is_cuti != original_is_cuti or topic.ys_t != original_ys_t: # 如果值改变了,则扣除积分 request.user.levels -= 2 # 假设用户模型有levels字段表示积分 request.user.save(update_fields=['levels']) # 重定向或返回成功消息 return redirect('topic_detail', topic_id=topic.id) else: form = EditTopicForm(instance=topic, user=request.user) # 渲染表单 return render(request, 'edit_topic.html', {'form': form})
表单(forms.py):
from django import formsfrom .models import Topicclass EditTopicForm(forms.ModelForm): class Meta: model = Topic fields = ['title', 'body', 'is_cuti', 'ys_t'] def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) super(EditTopicForm, self).__init__(*args, **kwargs) def save(self, commit=True): # 在这里,你不需要检查is_cuti或ys_t字段,因为比较逻辑已经在视图中处理了 return super(EditTopicForm, self).save(commit=commit)
请注意,这个示例假设Topic
模型有一个author
字段,它关联到用户(User
)模型,并且用户模型有一个levels
字段来表示积分。你需要根据你的实际模型结构来调整这些字段名。
在上面的代码中,我们首先通过get_object_or_404
获取到原始的Topic对象。然后,我们使用这个对象来创建表单实例,并绑定请求的数据。在表单验证通过后,我们比较原始Topic对象的is_cuti
和ys_t
字段与即将保存的对象中的相应字段。如果检测到变化,则扣除用户积分。
请根据你的具体需求调整上述代码,并确保你的模型结构和字段名称与代码中的假设相匹配。
接口说明 该接口由开发者开放给变现猫,变现猫进行调用 当用户发起余额支付请求后,变现猫将会创建一个订单,然后发起该用户的积分扣除请求给开发者。 这个请求会包含用户id,变现猫订单号,扣除的积分数等信息。开发者收到该请求后对签名进行校验。校验通过后请自行在自己系统中创建订单,并记录请求中的相关信息,同时执行用户积分扣除动作。 如果扣除成功,写入成功的参数和开发者系统的订单号,返回这个响应给变现猫。
问题内容: 我是django的新手,所以对我的新手问题感到抱歉,我 有一个模型,我需要让用户使用django表单或任何其他方式在其中编辑数据。 看上面的图像,我想显示此表单,其中已准备好填充数据,并让用户对其进行更新。 做这个的最好方式是什么 ? 编辑:这是我的views.py代码 请帮忙 问题答案: 假设你使用,请使用关键字参数,并传递你要更新的模型。 因此,如果你具有和(后者必须扩展),那么你
接口说明 该接口由开发者开放给变现猫,变现猫进行调用 不管积分扣除行为最终成功还是失败,变现猫都会向开发者发出通知。 开发者收到通知后,请以变现猫订单号 orderNum 为准进行处理,改变订单状态,如果扣除成功,开发者在系统内标记此订单为成功状态即可。如果扣除失败,开发者需要将该订单标记为失败,并将之前扣积分接口预扣的积分返还给用户。 无论接受到的结果如何,只要开发者收到该请求,请返回 ok 字
问题内容: 我开始组织一个新项目,假设我将拥有一些模型,例如产品和目录。 我将允许我的客户(不是访问者,仅特定客户)登录Django Admin网站以创建,编辑和删除自己的目录。 假设我创建了一个名为“商店”的模型,创建了每个商店(名称,地址,徽标,联系信息等),并创建了绑定到该商店的管理员用户。 现在,我希望这个新管理员(不是站点管理员,而是商店管理员-可能是用户组)仅查看和编辑与他的商店链接的
我正在工作的一个工作门户项目和招聘人员可以张贴一个实习。之后,他可以选择编辑他的文章以及。为此,我显示一个表单。(顺便说一句,我不使用Django表单)。我想在表单输入字段中显示存储在db中的值。我得到的问题为收音机,下拉列表,ckeditor文本字段和一个动态输入字段的技能。拜托,伙计们,你们能帮忙吗? 下面是我的代码片段:
我有两个下拉菜单,我想检索它的值,将它们用作变量,以过滤从内部Web API检索到的数据。 意见。派克 我没有使用Django表单,因为我没有保存年份以外的任何其他数据,我正在生成周数,但是,如果你认为使用Django表单来促进数据处理可能是有用的,那么写下你的观点,我想让这个网络应用更好。 标题。html 警告:我担心生成周数的代码是完全错误的,因为它不是正确的解决方案,我已经阅读了以下文章Dj