Показывать дочерние узлы по родительскому идентификатору - Django приложение - PullRequest
0 голосов
/ 02 апреля 2020

В моем приложении пользователь назначает встречу. Он / она выбирает дату, и каждая дата имеет фиксированные часы встречи, такие как: 14:00, 15:00, 16:00, 17:00 и 18:00. Эти часы должны быть выбраны из поля выбора сразу после выбранной даты. Итак, я хочу заполнить поле выбора часами, когда выбрана дата. Но проблема в том, что я не знаю, с какой технологией мне это делать: с Django или AJAX. Вот мои коды:

примечание: я могу оставить все как есть, но если, например, 14:00 в 03.02.2020 выбрано пользователем, для других этот час в 03.02.2020 должен быть отключен .

models.py:

class MeetingHour(models.Model):
    hour = models.TimeField()

    def __str__(self):
        return str(self.hour)

class Meeting(models.Model):
    participant_name = models.CharField(max_length=50)
    participant_email = models.EmailField(max_length=50)
    meeting_date = models.DateField()
    meeting_hour = models.ForeignKey(MeetingHour, on_delete = models.CASCADE)
    is_scheduled = models.BooleanField(default=False)

    def __str__(self):
        return self.participant_name

views.py:

def index(request):
    context = {
        'meetings': Meeting.objects.all(),
        'meetinghours': MeetingHour.objects.all()
    }
    if request.method == "POST":
        meeting_date = str(request.POST.get('date'))
        meeting_hour = str(request.POST.get('hour'))
        converted_meeting_date = datetime.strptime(request.POST.get('date'), "%m/%d/%Y").date() if meeting_date else None
        converted_meeting_hour = datetime.strptime(request.POST.get('hour'), "%H:%M:%S").time() if meeting_hour else None
        hour, _ = MeetingHour.objects.get_or_create(hour = converted_meeting_hour)
        Meeting.objects.create(
            meeting_date = converted_meeting_date,
            meeting_hour = hour,
            is_scheduled = True
        )
    return render(request, 'index.html', context)

html:

<form method="POST" action={% url 'index' %}>
<div class="form-group">
    <label for="date">Date</label><br />
    <input name="date" id="date" placeholder="Select date">
</div>
<div class="form-group">
    <label for="hour">Hour</label><br />
    <select name="hour" id="hour">
        {% for meetinghour in meetinghours %}
        <option value="{{meetinghour}}">{{ meetinghour.hour|time:"H:i" }}</option>
        {% endfor %}
    </select>
</div>
<div class="form-group">
    <button type="submit">Save</button>
</div>
</form>
...