Checking model integrity in django

I have a model called Entry that has the following fields

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)

When I create a new record, I do not want it to be created if the creator has an entire event already created between the same start and end dates. So my idea was that the user submits data from the creation form

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 , , , . , - ? , , ​​ , ? , ? Db , , , (, ... ...)

+4
1

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 , , , .

, .

0

All Articles