【发布时间】:2016-12-14 22:11:52
【问题描述】:
我想限制特定类的实例数。我已经通过使用一些 HTML 对其进行了限制,但如果有人偷偷重复使用表单的链接,则可以创建另一个实例。
所以在我的 views.py 中,我进行了查询
qry_models = Model.objects.filter(owner=request.user)
在我的 HTML 模板中,我已经进行了调整以防止出现多个实例。如果没有,则重定向到 ModelForm 以创建实例。如果查询中有模型,则显示/可用。
{% for model in qry_models %}
{{ model }}
{% empty %}
<a href="{% url 'app:model_new' %}">Make a new instance</a>
{% endfor %}
但是如果有人重用了一个被重定向到的链接,他可以创建另一个实例。应该防止这种情况发生。
我想为每个用户帐户创建一个实例。如果我关注Limit number of model instances to be created,我总是会收到 MultipleObjectsReturned 错误,因为它会查询来自所有帐户的所有实例,而不仅仅是来自活动/登录帐户的实例。
编辑: 如果已经有一个实例,我做了另一个总是重定向我的查询。但那是好的代码设计还是只是一个有用的逻辑圈?
def model_new(request):
mymodel = Model.objects.filter(owner=request.user)
counter = mymodel.count()
if counter >0:
return HttpResponseRedirect('somewhere')
if request.method != 'POST':
form = ModelForm()
....
【问题讨论】:
-
我怎样才能在管理员中阻止它?
-
你的模型是什么样的?我建议将
owner字段定义为OneToOneField而不是ForeignKey。 -
限制是多少?一个实例,还是其他一些?
-
每个用户只需要一个相关模型还是不同用户需要不同数量?
-
@AndreyShipilov OP 说“我希望每个用户帐户都有一个实例。”
标签: django validation django-models