9 changed files with 111 additions and 5 deletions
@ -0,0 +1,27 @@
|
||||
from dal import autocomplete |
||||
|
||||
from .models import Tag |
||||
|
||||
|
||||
class AuthenticatedUserCreateMixin(): |
||||
''' By default, autocomplete-light only allows creation of |
||||
choices if the user has add permission on the model. However, |
||||
we need to allow any authenticated user to create tags |
||||
''' |
||||
def has_add_permission(self, request): |
||||
print("i am called", request.user) |
||||
return request.user.is_authenticated |
||||
|
||||
|
||||
class TagAutocomplete( |
||||
AuthenticatedUserCreateMixin, autocomplete.Select2QuerySetView): |
||||
def get_queryset(self): |
||||
if not self.request.user.is_authenticated: |
||||
return Tag.objects.none() |
||||
|
||||
qs = Tag.objects.all() |
||||
|
||||
if self.q: |
||||
qs = qs.filter(name__icontains=self.q) |
||||
|
||||
return qs |
@ -0,0 +1,21 @@
|
||||
from django import forms |
||||
from crispy_forms.helper import FormHelper |
||||
from crispy_forms.layout import Submit |
||||
from dal.autocomplete import ModelSelect2Multiple |
||||
|
||||
from .models import Job |
||||
|
||||
|
||||
class JobForm(forms.ModelForm): |
||||
class Meta: |
||||
model = Job |
||||
fields = ('title', 'description', 'tags') |
||||
widgets = { |
||||
'tags': ModelSelect2Multiple(url='jobs:tag-autocomplete') |
||||
} |
||||
|
||||
def __init__(self, *args, **kwargs): |
||||
super().__init__(*args, **kwargs) |
||||
self.helper = FormHelper() |
||||
self.helper.form_method = 'post' |
||||
self.helper.add_input(Submit('submit', 'Post Job')) |
@ -0,0 +1,12 @@
|
||||
{% extends 'base.html' %} |
||||
{% block title %}Post a Job{% endblock %} |
||||
|
||||
{% load crispy_forms_tags %} |
||||
|
||||
{% block body_content %} |
||||
<div class="row"> |
||||
<div class="col-md-12"> |
||||
{% crispy form %} |
||||
</div> |
||||
</div> |
||||
{% endblock %} |
@ -1,9 +1,21 @@
|
||||
from django.urls import path |
||||
|
||||
from . import views |
||||
from . import autocomplete as autocomplete_views |
||||
|
||||
app_name = 'jobs' |
||||
urlpatterns = [ |
||||
path('', views.Index.as_view(), name='index'), |
||||
path('jobs/', views.JobList.as_view(), name='jobs'), |
||||
path('jobs/create/', views.JobCreate.as_view(), name='create'), |
||||
path('jobs/', views.JobList.as_view(), name='list'), |
||||
] |
||||
|
||||
|
||||
# autocomplete endpoints |
||||
urlpatterns += [ |
||||
path( |
||||
'tag-autocomplete/', |
||||
autocomplete_views.TagAutocomplete.as_view(create_field='name'), |
||||
name='tag-autocomplete', |
||||
), |
||||
] |
Loading…
Reference in new issue