gpt4 book ai didi

django - django 中的模型完整性检查

转载 作者:行者123 更新时间:2023-12-01 06:31:27 27 4
gpt4 key购买 nike

我有一个名为 Entry 的模型,它具有以下字段

from django.contrib.auth.models import User

class Entry(models.Model):
start = models.DateTimeField()
end = models.DateTimeField()
creator = models.ForeignKey(User)
canceled = models.BooleanField(default=False)

当我创建一个新条目时,如果创建者已经在相同的开始和结束日期之间创建了一个已创建的事件,我不想被创建。所以我的想法是当用户从创建表单发布数据时
if request.method == 'POST':
entryform = EntryAddForm(request.POST)
if entryform.is_valid():
entry = entryform.save(commit=False)
entry.creator = request.user

#check if an entry exists between start and end
if Entry.objects.get(creator=entry.creator, start__gte=entry.start, end__lte=entry.end, canceled=False):
#Add to message framework that an entry allready exists there
return redirect_to('create_form_page')
else:
#go on with creating the entry

我在想,也许一个唯一的字段并正确检查数据库完整性会更好,但正是取消的字段让我无法选择唯一的字段。你认为我的方法会有什么问题吗?我的意思是它是否确保用户的开始日期和结束日期之间不会设置任何条目,他是否已经保存了一个?你认为这个代码去预存更好吗? db 将开始为空,因此在输入一个条目后,一切都会顺其自然(假设......不太确定......)

最佳答案

您需要使用 Q对于复杂的查询。

from django.db.models import Q
_exists = Entry.objects.filter(Q(
Q(Q(start__gte=entry.start) & Q(start__lte=entry.end)) |
Q(Q(end__gte=entry.start) & Q(end__lte=entry.end)) |
Q(Q(start__lte=enrty.start) & Q(end__gte=entry.end))
))
if _exists:
"There is existing event"
else:
"You can create the event"

由于我不测试这个,我使用 Q我认为有必要的任何对象。

使用此查询,您将不需要任何唯一检查。

关于django - django 中的模型完整性检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20323309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com