【问题标题】:Django / JQuery - Changing JQuery calendar based on DB dataDjango / JQuery - 根据数据库数据更改 JQuery 日历
【发布时间】:2019-10-11 05:42:49
【问题描述】:

作为任务的一部分,我创建了一个“公寓列表”网站。我设法做到了,但现在我需要为它建立一个“预订系统”。 基本思想是登录用户可以从列出的公寓中选择一个公寓,选择“开始日期”和“结束日期”(如果该公寓尚未预订)并预订该公寓。

当用户单击日期输入字段时,会弹出一个 jquery 日期选择器,然后他可以通过日历选择日期,结束日期也是如此。 一旦他完成预订,我希望在日历中“禁用”日期,这样其他人就无法选择它们。

这是我正在使用的日期选择器:

https://jqueryui.com/datepicker/

和代码:

    <script>
        $(function () {
            $("#datepicker").datepicker();
        });
    </script>

我是一个完全的 Django / Web 开发新手,需要一些指导才能从某个地方开始这项任务,我知道一些 JS,但 jquery 对我来说是新的,这就是我想要一些帮助的原因。

我有一个公寓模型,其中包含所有公寓信息,我使用这些信息通过模板打印出所有内容。 我有一个预订模型,它将预订的开始日期和结束日期保存到数据库中。

我正在使用提供的 django 用户模型来注册/登录。 我正在使用 Django 2.1.8 (mySQL db)

我创建了这个视图和模型来进行预订:

单一列表视图:

def apartment_view(request, apartment_id):

    reservation_pk = request.GET.get('pk', None)
    reservation = Reservation.objects.filter(apartment__pk=apartment_id)
    apartment = get_object_or_404(Apartment, pk=apartment_id)
    context = {'apartment': apartment, }
    context_instance = RequestContext(request)

    form = ReservationForm()
    if request.method == 'GET':
        form = ReservationForm()

    elif request.method == 'POST':
        form = ReservationForm(request.POST)
        if form.is_valid():
            reservation = form.save(commit=False)
            reservation.apartment = apartment
            reservation.save()
            form.save()
            return HttpResponseRedirect('/booking/')
    args = {}
    args['form'] = form
    args['apartment'] = context
    args['reservation'] = reservation
    return render(request, 'booking/apartment.html', args)

型号:


class Apartment(models.Model):
    title = models.CharField(max_length=200)
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100)
    zipcode = models.CharField(max_length=20)
    description = models.TextField(blank=True)
    price = models.IntegerField()
    bedrooms = models.IntegerField()
    bathrooms = models.DecimalField(max_digits=2, decimal_places=1)
    garage = models.IntegerField(default=0)
    size = models.IntegerField()
    photo_main = models.ImageField(upload_to='photos/%Y/%m/%d/')
    photo_1 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
    photo_2 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
    photo_3 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
    photo_4 = models.ImageField(upload_to='photos/%Y/%m/%d/', blank=True)
    in_rent = models.BooleanField(default=False)
    list_date = models.DateTimeField(default=datetime.now, blank=True)

    def __str__(self):
        return self.title


class Reservation(models.Model):
    apartment = models.ForeignKey(Apartment, related_name='reservations',
                                  on_delete=models.CASCADE, blank=True, null=True)
    start_date = models.DateField(blank=True, null=True, unique=True)
    end_date = models.DateField(blank=True, null=True, unique=True)
    name = models.CharField(default="", max_length=200, unique=True)

    def __str__(self):
        return "Reservation"


我的表格:

class ReservationForm(forms.ModelForm):
    class Meta:
        model = Reservation
        fields = [
            'start_date',
            'end_date',
            'name',
        ]
        widgets = {
            'start_date': TextInput(attrs={'id': 'datepicker'}),
            'end_date': TextInput(attrs={'id': 'datepicker2'}),
        }

感谢您花时间阅读本文,感谢您的帮助! 祝你们有美好的一天!

TLDR :根据数据库中的数据,我需要“禁用”jquery 日历中的某些日期范围

【问题讨论】:

  • 您可以参考stackoverflow.com/questions/18350923/… 禁用日期选择器
  • 这不是我要问的,如果令人困惑,请见谅。我需要一种方法来禁用日历中的 DATES,因此我需要日历“查看”Reservations 模型,并“禁用”或灰显其中的所有日期。
  • 您的意思是要显示日历但不能从中选择日期?
  • 是的,没错!我需要从 db 查询并根据数据禁用选择返回的日期!

标签: javascript python jquery django model


【解决方案1】:

您可以使用beforeShowDay 函数参数来禁用日期。

请查看JQuery UI Datepicker API了解更多信息

$(function () {
        $('.pickWeek').datepicker({
           beforeShowDay : function (date) {return [false, '',''];}
        })
    });
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  
  <p>Date: <input type="text" id="datepicker" class="pickWeek"></p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多