簡體   English   中英

如何檢查日期是否從 Django Model

[英]How Can I Check if Date is Passed from Django Model

我真的是 Django 的新手,我想檢查存儲在 Model 中的日期是否已通過。 事實上,我目前正在開發一個票務應用程序,用戶必須在其中購買和激活門票,我想檢查活動門票日期是否在激活后通過。

我的模型:

class Event(models.Model):
    event_name = models.CharField(max_length=100)
    date = models.DateField(auto_now_add=False, auto_now=False, null=False)
    event_venue = models.CharField(max_length=200)
    event_logo = models.ImageField(default='avatar.jpg', blank=False, null=False, upload_to ='profile_images')
    added_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.event_name}"

    #Prepare the url path for the Model
    def get_absolute_url(self):
        return reverse("event_detail", args=[str(self.id)])

class Ticket(models.Model):
    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    price = models.PositiveIntegerField()
    category = models.CharField(max_length=100, choices=PASS, default=None, blank=False, null=False)
    added_date = models.DateField(auto_now_add=True)

    def __str__(self):
        return f"{self.event} "

    #Prepare the url path for the Model
    def get_absolute_url(self):
        return reverse("ticket-detail", args=[str(self.id)])

    def generate_pin():
        return ''.join(str(randint(0, 9)) for _ in range(6))

class Pin(models.Model):
    ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
    value = models.CharField(max_length=6, default=generate_pin, blank=True)
    added = models.DateTimeField(auto_now_add=True,  blank=False)
    reference = models.UUIDField(primary_key = True, editable = False, default=uuid.uuid4)
    status = models.CharField(max_length=30, default='Not Activated')

    #Save Reference Number
    def save(self, *args, **kwargs):
        self.reference == str(uuid.uuid4())
        super().save(*args, **kwargs) 

    def __unicode__(self):
        return self.ticket

   class Meta:
        unique_together = ["ticket", "value"]

  def __str__(self):
       return f"{self.ticket}"

  def get_absolute_url(self):
       return reverse("pin-detail", args=[str(self.id)])

我對 PIN 激活的看法

def pin_activation(request):
if request.method == "POST":
    
    #Create new form with name form
    form = PinActivationForm(request.POST)

    #Check if the the form has valid data in it
    if form.is_valid():

        #Check the status of the user Pin with the one in the Database
        check_pin_status = Pin.objects.get(value=form['pin'].value(), status='Not Activated')

        #Check if the PIN is correct and NOT ACTIVATED
        if check_pin_status:
     
            #Get the Pin, Ticket, Event Date
            event_date = check_pin_status.ticket.event.date
            
            current_date = datetime.now()

            if event_date > current_date:
                messages.error(request, 'Event Has Passed')
                return redirect('pages-index')
            else:
                 #Update the User Pin with a new status of Activated
                Pin.objects.filter(value=form['pin'].value()).update(status='Validated')
                #Message the User
                messages.success(request, 'Pin Validated Successfully')
                #Redirect the user to register for seat
                return redirect('register-guest')



           
        #Check filter the DB where the PIN status is Validated
        elif Pin.objects.filter(value=form['pin'].value(), status="Validated"):
            messages.error(request, 'Pin Already Validated. Register for Seat')
            return redirect('register-guest')
        #Check Filter PIN in DB where Status is Activated
        elif  Pin.objects.filter(value=form['pin'].value(), status="Activated"):
            messages.error(request, "Pin Already Activated, Login.")
            return redirect('user-login')
            
               
    else:
        messages.error(request, 'Something Went Wrong. Try again')
else:
    form = PinActivationForm()
context = {
    'form':form,
}
return render(request, 'user/pin_activation.html', context)

有人應該幫助我解決這個問題的最佳方法,因為我的日期檢查代碼無法將 datetime.datetime 與 datetime.date 進行比較

正如您的錯誤所暗示的那樣,您無法將日期時間與日期進行比較。 您的 model 字段只是一個沒有任何時間信息的日期。 而您正在將此與timezone.now()進行比較,后者是一個日期時間。

這是違規行:

if event_date > current_date:

將其更改為:

if event_date > timezone.now().date():

首先,您需要從日期時間 object 獲取日期,然后將其與事件日期進行比較,因為您的事件日期是您的 Model 中的DateField

event_date = check_pin_status.ticket.event.date          
current_date = datetime.now().date()
if event_date > current_date:
   .....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM