Django:如何添加复选框?

时间:2019-04-06 20:27:08

标签: python django checkbox calendar

我正在尝试在日历中的事件旁边添加一个复选框。 我还希望将其保存为用户留下的任何内容(选中/未选中)。

views.py

def event(request, event_id=None):
    instance = Event()

    if event_id:
        instance = get_object_or_404(Event, pk=event_id)
    else:
        instance = Event()

    form = EventForm(request.POST or None, instance=instance)
    if request.POST and form.is_valid():
        event = Event.objects.create(**form.cleaned_data, user=request.user)
        print(event.title)
        return HttpResponseRedirect(reverse('cal:calendar'))
    return render(request, 'cal/event.html', {'form': form})

class CalendarView(generic.ListView):
    model = Event
    template_name = 'cal/calendar.html'

    def get_queryset(self):
        qs = Event.objects.filter(user=self.request.user.id)
        return qs

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        d = get_date(self.request.GET.get('month', None))
        cal = Calendar(d.year, d.month)
        cal.user = self.request.user
        html_cal = cal.formatmonth(withyear=True)
        context['calendar'] = mark_safe(html_cal)
        context['prev_month'] = prev_month(d)
        context['next_month'] = next_month(d)
        return context

models.py

class Event(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.TextField(max_length=350)
    start_time = models.DateTimeField()
    end_time = models.DateTimeField()

    @property
    def get_html_url(self):
        url = reverse('cal:event_edit', args=(self.id,))
        return f'<a href="{url}"> {self.title} </a>'

    def __str__(self):
        return '{} - {} by {}'.format(self.title, self.description, self.user)

Heres what my calendar looks like with an event added

enter image description here

1 个答案:

答案 0 :(得分:0)

您需要在事件模型中使用多个字段,例如:

class Event(models.Model):
    ...
    attending = models.ManyToManyField('User', blank=True)

https://docs.djangoproject.com/en/2.2/topics/db/examples/many_to_many/

您需要添加一个复选框:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox

如果用户选中了该复选框,则可以发出发布请求以更新数据库。

仅在用户选中此框后,才需要更新/保存到数据库。