Django community: Django Q&A RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
Invalid block tag on line 126: 'set', expected 'empty' or 'endfor'. Did you forget to register or load this tag?
I want to use {% set … } but it has problem is django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 126: ‘set’, expected ‘empty’ or ‘endfor’. Did you forget to register or load this tag? what should i do ? html file <div class="carousel-inner"> {% for knowledge in knowledges %} {% set count = 0 %} {% for photo in photo01s %} {% if photo.category01 == knowledge %} {% set count = count + 1 %} <div class="carousel-item {% if forloop.first %}active{% endif %}"> <div class="row"> <div class="card" style="background-image: url('{{ photo.image01.url }}');"></div> </div> </div> {% endif %} {% endfor %} {% endfor %} </div> models.py class Knowledge(models.Model): name01 = models.CharField(max_length=100, null=False, blank=False) def __str__(self): return self.name01 class Photo01(models.Model): category01 = models.ForeignKey(Knowledge, on_delete=models.SET_NULL, null=True, blank=True) image01 = models.ImageField(null=False, blank=False) description01 = models.TextField() title01 = models.CharField(max_length=100, default='') def __str__(self): return self.title01 views.py def knowledge01(request): knowledges = Knowledge.objects.all() photo01s = Photo01.objects.all() context = {'knowledges': knowledges, 'photo01s': photo01s} return render(request, 'photos/knowledge01.html', context) I have tried several ways but it does not work. -
How to create two users of different permissions in Django?
How to set up two different types of users in Django: Superuser, who has access to all system functionalities, and Maintenance user, who can perform system maintenance. Automatically create them upon system initialization.Thanks in advance. As a beginner, there is not much thought. I will only create an initial user. I hope you can provide ideas and related reference codes. Thanks here to thank you -
Send and receive socket without opening the html web page
I am having a django project where I have chat.html, journey.html, and manager.html. One of the flows is that I am sending socket for triggering journey from chat.html. And in the journey.html, I have a flow for approval where the socket gets sent to manager.html. This flow is working only when I keep all these 3 pages open in browser. But if I don't keep the "journey" page open in a browser, the socket is not getting received and send is not happening from "journey". This should work without the need to open "journey" page in the browser. How can I do that? -
Design patterns and user control in Django
I'm a new web developer building a system using Django for users across multiple departments to streamline data uploading, processing, and downloading. Most users will be restricted to uploading, modifying, and viewing data within their own department. Some privileged users will have additional download permissions for their department's data. Additionally, there will be super users who can view data from all departments. However, I'm stuck on implementing user permission control (effective translation depends on context, but "user permission control" works well here). I've considered two approaches: Multiple Web Pages: The simplest method would involve creating separate web pages for users with different permissions. Users with limited access would only see upload, modify, and view functionalities for their department's data, with no download button. Super users would have access to all functionalities and data across departments. While straightforward, this approach requires significant development time as separate pages need to be built for each permission level. Single Integrated Web Page: A more elegant but potentially complex solution would be to develop a single, comprehensive web page for all users. This page would have all functionalities, but user permissions would control what each user can actually see and interact with. This approach offers … -
Django_mailbox, similar queries
Help me remove duplicates please, I’ve already tried everything, documentation, chatGPT, I don’t know how to remove it, it’s just that when I access the .html attribute a new request to the database is generated messagesDB = Message.objects.filter(mailbox=mailbox).select_related('mailbox', 'message_used').prefetch_related(Prefetch('attachments', queryset=MessageAttachment.objects.all(), to_attr='all_attachments')) for message in messagesDB: print(message.html) SELECT ••• FROM "django_mailbox_messageattachment" WHERE "django_mailbox_messageattachment"."id" = 44 LIMIT 21 13 similar queries. SELECT "django_mailbox_messageattachment"."id", "django_mailbox_messageattachment"."message_id", "django_mailbox_messageattachment"."headers", "django_mailbox_messageattachment"."document" FROM "django_mailbox_messageattachment" WHERE "django_mailbox_messageattachment"."id" = 44 LIMIT 21 13 similar queries. C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django\contrib\staticfiles\handlers.py in call(80) return self.application(environ, start_response) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\whitenoise\middleware.py in call(124) return self.get_response(request) C:\Users\user\AppData\Local\Programs\Python\Python310\lib\contextlib.py in inner(79) return func(*args, **kwds) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django\views\generic\base.py in view(104) return self.dispatch(request, *args, **kwargs) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django\contrib\auth\mixins.py in dispatch(73) return super().dispatch(request, *args, **kwargs) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django\contrib\auth\mixins.py in dispatch(109) return super().dispatch(request, *args, **kwargs) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django\views\generic\base.py in dispatch(143) return handler(request, *args, **kwargs) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django\views\generic\base.py in get(226) context = self.get_context_data(**kwargs) C:\Users\user\Desktop\Задачник\ProjectsDashboard\dashboard\timetable\views.py in get_context_data(2109) messagesDB = self.get_message_telegram(self.mailbox) C:\Users\user\Desktop\Задачник\ProjectsDashboard\dashboard\timetable\views.py in get_message_telegram(2058) print(message.html) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django_mailbox\models.py in html(671) self.get_email_object(), 'text', 'html' C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django_mailbox\models.py in get_email_object(783) self._email_object = self._rehydrate(flat) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django_mailbox\models.py in _rehydrate(683) self._rehydrate(part) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django_mailbox\models.py in _rehydrate(683) self._rehydrate(part) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\django_mailbox\models.py in _rehydrate(687) attachment = MessageAttachment.objects.get( C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\cacheops\query.py in get(327) return qs._no_monkey.get(qs, *args, **kwargs) C:\Users\user.virtualenvs\dashboard-APxxHYiU\lib\site-packages\cacheops\query.py in _fetch_all(250) return self._no_monkey._fetch_all(self) -
ValueError: Django can only handle ASGI/HTTP connections, not websocket
I'll try to explain in great detail what is my problem and how the project is structured. I want to make a real time chat applications. So far my project has: SignupLoginApp ProgettoDiGruppo (Main app) Home ChatManagement(Websocket app). Now the problem is I can't get the websocket to run and since it's my first time I don't really know what I'm doing. Here is my ProgettoDiGruppo.settings.py: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # ThirdParty 'crispy_forms', 'crispy_bootstrap4', 'channels', # MyApp 'SignupLoginApp.apps.SignupappConfig', 'Home.apps.HomeConfig', 'ChatManagement.apps.ChatmanagementConfig' ] WSGI_APPLICATION = 'ProgettoDiGruppo.wsgi.application' ASGI_APPLICATION = 'ProgettoDiGruppo.routing.application' CHANNEL_LAYERS = { 'default': { "BACKEND": "channels.layers.InMemoryChannelLayer", } } Here is my ProgettoDiGruppo.routing.py from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter `import ChatManagement.routing `websocket_urlpatterns = [ ] application = ProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter( ChatManagement.routing.websocket_urlpatterns ) ), }) This is my ChatManagement.routing.py from django.urls import re_path from ChatManagement import consumers websocket_urlpatterns = [ re_path(r'/ws/chat/(?P<room_name>\w+)/$', consumers.ChatConsumer.as_asgi()), ] ChatMAnagement.consumers.py import json from channels.generic.websocket import AsyncWebsocketConsumer class ChatConsumer(AsyncWebsocketConsumer): async def connect(self): self.room_name = self.scope['url_route']['kwargs']['room_name'] self.room_group_name = 'chat_%s' % self.room_name await self.channel_layer.group_add( self.room_group_name, `self.channel_name ) await self.accept() await self.channel_layer.group_send( self.room_group_name, { 'type': 'chat_message', 'message': self.scope['user'].username } ) async def chat_message(self, event): # This method will be called when a 'chat_message' event is … -
Django Bootstrap Datepicker Plus. Set maxDate as another DatePicker value plus 2 years
I need to set maxDate for DatePickerInput as another DatePickerInput value plus 2 years. From the documentation I've learned, that we can use link to another datepicker to set minDate (range_from attribute), but I'm not sure how to set maxDate like that. Can we do something like this? from bootstrap_datepicker_plus.widgets import DatePickerInput from .models import Event from django import forms from dateutil.relativedelta import relativedelta class ToDoForm(forms.Form): start_date = forms.DateField(widget=DatePickerInput()) end_date = forms.DateField(widget=DatePickerInput(range_from="start_date", options={ 'maxDate': start_date.date + relativedelta(years=2) })) -
Restrict Multiple Login for Same User with DRF
I'm trying to delete any existing sessions associated with the user and create a new session. So that the user can only be authenticated in one browser or device at a time. If user is logged in to browser_1 and user is logged in again on browser_2, then in that case, I want to log out of user_1 from browser_1. Here is models.py: class User(AbstractBaseUser, PermissionsMixin): '''User in the system.''' email = models.EmailField(max_length=255, unique=True) name = models.CharField(max_length=255) is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) objects = UserManager() USERNAME_FIELD = 'email' class UserSession(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) token = models.CharField(max_length=100) Here is views.py: from core.models import UserSession class CreateTokenView(ObtainAuthToken): '''Create a new auth token for user.''' serializer_class = AuthTokenSerializer renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES def post(self, request, *args, **kwargs): response = super().post(request, *args, **kwargs) serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.validated_data['user'] UserSession.objects.filter(user=user).delete() token, _ = Token.objects.get_or_create(user=user) session = UserSession.objects.create(user=user, token=token.key) session.save() response.data['token'] = token.key return response Here I tried to make user create a new session and token when authenticated from browser_2, thus deleting the session in browser_1 and deactivating the token. But this didn't work. -
Django combing multiple managers from inherited classes
I have model that inherits from 2 abstract classes with overridden managers: class ManagerA(models.Manager): def get_queryset(self): return super().get_queryset().filter(attrA="A") class A(models.Model): objects = ManagerA() class Meta: abstract = True class ManagerB(models.Manager): def get_queryset(self): return super().get_queryset().filter(attrB="B") class B(models.Model): objects = ManagerB() class Meta: abstract = True class Main(A, B): pass How to override manager in Main class, that it combines both filters from ManagerA and ManagerB? I want ot have something like: Main.objects.all() -> works like Main.objects.filter(attrA="A", attrB="B") -
django Direct assignment to the forward side of a many-to-many set is prohibited. Use user.set() instead
hi i have aproject in django when i try to runserver the message above is shwon this is models.py fo class Display(models.Model) : url=models.URLField(unique=True) text = models.CharField(max_length=150) class Display_Data(models.Model) : displays = models.ManyToManyField(Display) user= models.ManyToManyField(User) choosenum=models.IntegerField() puplish_date =models.DateTimeField(default=datetime.now) and this the view.py tdef submit_operation(request): if request.method == 'POST': url = request.POST.get('url') text = request.POST.get('title') choosenum = request.POST.get('CHOOSE') if Display.objects.filter(url=url).exists(): display = Display.objects.get(url=url) display_data = Display_Data.objects.create(choosenum=choosenum, user=request.user, date_published=datetime.now()) display_data.displays.add(display) else: display = Display.objects.create(url=url, text=text) display_data = Display_Data.objects.create(choosenum=choosenum, user=request.user, date_published=datetime.now()) display_data.displays.add(display) # ... (إعادة توجيه المستخدم) #return redirect('searchpage') return redirect(request.META.get('HTTP_REFERER'))ype herea `and when i try to refer to vidion saved before the message above abeer i make a site show video from youtube in a frame and asked a user to value the vidio i saved vidio url and when i want from user to again evluate the vidio the mistake apeer -
Html template from contributions-django libraty not rendering properly
I want to use a GitHub-like contributions calendar in my Django project. After a quick research, I found the contributions_django library. After some problems, I managed to install it, but even after following the instructions, the contributions graph does not load properly on the page. What should be an empty contributions graph looks like this: First I imported the library to my views.py file: from contributions_django.graphs import generate_contributors_graph Then I used 'generate_contributions_graph' method in my view: contributions = [] calendar = generate_contributors_graph(contributions, title="Decks reviews") return render(request, "myapp/user_stats.html", {"calendar":calendar} Finally, I placed this line of code in the "user_stats" HTML template: {% include "contributions_django/graph.html" %} And that's it. It should display an empty graph, but it doesn't. I also tried to insert some dates in the "calendar", but it didn't work; nothing changed: today = timezone.now() last_week = today - timedelta(days=7) contributions = [last_week, today] calendar = generate_contributors_graph(contributions, title="Decks reviews") If you have any idea what the cause of the problem might be, please help. Thanks in advance. -
directly compute a geohash with django without creating a model
is it possible to use this GeoHash class directly without creating a model on a db? e.g.: from django.contrib.gis.geos import Point from django.contrib.gis.db.models.functions import GeoHash p = Point(x=lon, y=lat, srid=4326) geohash_str = GeoHash(p).??? # i want the actual geohash string here -
White screen while trying to make auth through google in Django project
I followed this guide https://www.photondesigner.com/articles/google-sign-in?ref=yt-google-sign-in First of all, I could not create button through the https://developers.google.com/identity/gsi/web/tools/configurator, but I copied the code from guide and changed the client id, but anyway I get this, when I click the button to auth through google after clicking the google auth button I tried to follow the guide, but it didn't help. Maybe someone got the same problem and know how to fix it -
Django REST Authentication credentials were not provided
I'm developing an API using Django Rest Framework. but when i'm trying to access the console gives me this error: @api_view(['GET']) @authentication_classes([TokenAuthentication]) @permission_classes([IsAuthenticated]) def get_all_messages(request, user_id): messages = Message.objects.filter(receiver_id=user_id) serializer = MessageSerializer(messages, many=True) return Response(serializer.data) from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView urlpatterns = [ path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), path('admin/', admin.site.urls), path('api/get-all-messages/<int:user_id>/', get_all_messages), ] REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer', ], 'DEFAULT_AUTHENTICATION_CLASSES': [ # Corrected typo here 'rest_framework.authentication.TokenAuthentication', ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ] } http://localhost:8000/api/token/ copy the token I have searched but they say to change the REST_FRAMEWORK's AUTHENTICATION PERMISSIONS which I have done as you can see, but to no avail. -
Drawbacks of customer save method to avoid user getting a userprofile_id with a specific value. (Django/Heroku)
In my Django project, I need to avoid users creating a userprofile_id with a value of 3 (3, 13, 203...). This is an interim workaround another issue which will probably take longer to result. I posted the code below. But my question relates more to the drawbacks of this interim fix. What sort of problem could this generate. This is the list I came up with and my answers to each of them: User_id will be different than userprofile_id - cant see any problems here. Affect to database integrity when custom method is removed - I cannot see how the remove of the method would affect the database. Hopefully I am right.; Some performance issue - The save is at the database level which might cause some delays I suppose. This is for a pilot+. I dont expect 1000s of new users a day. Could two users who signup at the same time end up with the same userprofile_id? Would there be a wait to limit potential of deadlocks? the code for those who are curious: class UserProfile(models.Model): user = models.OneToOneField(User, null=True, on_delete=models.CASCADE) def __str__(self): return str(self.user) def save(self, *args, **kwargs): if not self.pk: # Logic for generating userprofile_id without … -
How can I diagnose slow response times from Google App Engine and Django to serve a web app?
I've deployed a Django based portfolio website - http://johnmcgurk.no - on App Engine and I am struggling to diagnose why one app has such a poor response time. When running google PageSpeed Insights the "core" app on the root url has an initial server response time of ~6s, while the secondary app (an e commerce demo) has a still bad, but much better response time of around 0.8s. The app uses Google Cloud SQL with Postgres 14 for the database, and a Google Image bucket to serve the static and image files. I'm completely new to hosting webapps, so an advice is much appreciated, thank you in advance! I've searched online for tools to help me diagnose where the bottleneck is, and have run the website on my local machine using google-sql-proxy in an attempt to rule out the database as the root of the issue (also the e commerce site uses far more database queries), and haven't managed to find anything of use. -
Django: POST request returns GET not allowed
I have a page which requires a POST request: When I click on POST at the bottom, which presumably makes a POST request, I get the same error as when I make a GET request, which you can see at the top: "detail": "Method \"GET\" not allowed." Why does Django think my POST request is a GET request? Thank you. PS The login credentials I have provided exist. When I provide incorrect credentials I get an error telling me that. -
Using django-tinymce inline with its configuration
I'm using django-tinymce and have it successfully working on Django Admin fields, and fields in standard non-Admin forms, to update an object. I'm now trying to use it "inline" and, while this submits and saves, it doesn't use django-tinymce's configuration – specified in my settings.py – like the others. I have a Django form like this: class TestModelInlineUpdateForm(forms.ModelForm): class Meta: model = TestModel fields = ("description",) widgets = {"description": TinyMCE()} And my template contains: <form method="post" id="testForm"> {% csrf_token %} {{ form.media }} <div class="tinymce" id="inline-editor"> {{ object.description|safe }} </div> {% for hidden in form.hidden_fields %} {{ hidden }} {% endfor %} <input type="hidden" name="description" value=""> <button type="submit">Update</button> </form> <script type="text/javascript"> tinymce.init({ selector: '#inline-editor', inline: true }); // Set the description field to the new HTML on form submission. document.querySelector("#testForm").addEventListener("submit", function(ev) { ev.preventDefault(); let descriptionHTML = document.querySelector("#inline-editor").innerHTML; let descriptionField = document.querySelector("input[name='description']"); descriptionField.value = descriptionHTML; this.submit(); }); </script> I had to make up that last bit of JS, that ensures the edited HTML is copied from TinyMCE to the hidden form field and, while that works, I feel there is probably a better way? On page load the console is showing: SyntaxError: JSON Parse error: Unexpected identifier "undefined" which probably isn't … -
Use wagtail form into other templates
So I have created a Form with the Wagtail Form Builder and works well. Now I want to use the created from into other templates throughout my project. I have originally created the form for the Contact Page, but now I want this same form to be use in other templates such as lets say a Blog Page, under the post as a contact form. Is there any way to do that? Thanks a lot! I dont know where to start because i cant really bring the ID or value of the specific form. -
Django is unable to connect to your MySQL server running on 'localhost' at port 3306
enter image description here enter image description here can any one help me with this error ? and i tried many ways but still there is issue with my sql server, django is not getting connected to sql server ! Expecting resolution. -
Unable to get both access and refresh cookies in http only cookies
I'm creating a Django jwt authentication web app and I am trying to get both access and refresh tokens via HTTP-only cookies. But the front end can only get the refresh token, not the access token so I can't log in. Frontend is done in React and I have used {withCredentials: true} yet I only get a refresh token, not the access token Authentication.py file import jwt, datetime from django.contrib.auth import get_user_model from django.utils import timezone from django.conf import settings from rest_framework import exceptions from rest_framework.authentication import BaseAuthentication, get_authorization_header User = get_user_model() secret_key = settings.SECRET_KEY class JWTAuthentication(BaseAuthentication): def authenticate(self, request): auth = get_authorization_header(request).split() if auth and len(auth) == 2: token = auth[1].decode('utf-8') id = decode_access_token(token) user = User.objects.get(pk=id) return (user, None) raise exceptions.AuthenticationFailed('Unauthenticated') def create_access_token(id): return jwt.encode({ 'user_id': id, 'exp': timezone.now() + datetime.timedelta(seconds=60), 'iat': timezone.now() }, 'access_secret', algorithm='HS256') def decode_access_token(token): try: payload = jwt.decode(token, 'access_secret', algorithms='HS256') return payload['user_id'] except: raise exceptions.AuthenticationFailed('Unauthenticated') def create_refresh_token(id): return jwt.encode({ 'user_id': id, 'exp': timezone.now() + datetime.timedelta(days=10), 'iat': timezone.now() }, 'refresh_secret', algorithm='HS256') def decode_refresh_token(token): try: payload = jwt.decode(token, 'refresh_secret', algorithms='HS256') return payload['user_id'] except: raise exceptions.AuthenticationFailed('Unauthenticated') views.py file import random import string from django.contrib.auth import get_user_model from .models import UserTokens, PasswordReset from django.http import JsonResponse from rest_framework.views … -
Not having write permissions for a file in a docker container
Every time I want to edit and save a file using a text editor like Sublime Text or VS Code, it requires my password. The files are part of a Django project in a docker container. Only the root user has write permissions. How can I set this so it doesn't require password? Also there's a lock icon on the project folders that have this problem. I tried adding my user to docker group to solve this problem but it didn't resolve. -
Is there any way in Python to run code with parameters from string variable?
I'm developing website with interactable algorithms. The problem is that i get code as string from database and i need to execute it with parameters that came from user interface. Is there any Python library that can solve this problem? I'm new to Python and Django and I don't really know is this possible or not. Example of code: class CombinationColex: def __init__(self, n, k): self.total_elements = n self.combination_size = k self.combination_array = [0] * (self.combination_size + 1) self.combination_array[self.combination_size] = self.total_elements + 2 self.first() def first(self): for i in range(self.combination_size): self.combination_array[i] = i def next(self): if self.combination_array[0] == self.total_elements - self.combination_size: self.first() return self.combination_size j = 0 while self.combination_array[j + 1] - self.combination_array[j] == 1: self.combination_array[j] = j j += 1 self.combination_array[j] += 1 return j def data(self): return self.combination_array[:-1] def Start(self): while True: for i in range(self.total_elements): present = i in self.data() print("1" if present else "0", end="") print() if self.next() == self.combination_size: break combination_generator = CombinationColex(n, k) combination_generator.Start() -
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet, on django channels
My app run both using HTTP and Websocket using django channels. I am preparing for deployment and yet when I run daphne MarketPlace.asgi:application it throws this error. I am not sure if I had circular imports because my User model has been used a lot on other models from other applications. Traceback (most recent call last): File "/home/luser/.local/share/virtualenvs/MarketPlace-8dI9Cb42/bin/daphne", line 8, in <module> sys.exit(CommandLineInterface.entrypoint()) File "/home/luser/.local/share/virtualenvs/MarketPlace-8dI9Cb42/lib/python3.10/site-packages/daphne/cli.py", line 171, in entrypoint cls().run(sys.argv[1:]) File "/home/luser/.local/share/virtualenvs/MarketPlace-8dI9Cb42/lib/python3.10/site-packages/daphne/cli.py", line 233, in run application = import_by_path(args.application) File "/home/luser/.local/share/virtualenvs/MarketPlace-8dI9Cb42/lib/python3.10/site-packages/daphne/utils.py", line 17, in import_by_path target = importlib.import_module(module_path) File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/home/luser/Desktop/MarketPlace/./MarketPlace/asgi.py", line 11, in <module> from chats.routing import websocket_urlpatterns File "/home/luser/Desktop/MarketPlace/./chats/routing.py", line 3, in <module> from . import consumers File "/home/luser/Desktop/MarketPlace/./chats/consumers.py", line 10, in <module> from .models import Conversation, Message File "/home/luser/Desktop/MarketPlace/./chats/models.py", line 8, in <module> from accounts.models import User File "/home/luser/Desktop/MarketPlace/./accounts/models.py", line 4, in <module> from django.contrib.auth.models import AbstractUser File "/home/luser/.local/share/virtualenvs/MarketPlace-8dI9Cb42/lib/python3.10/site-packages/django/contrib/auth/models.py", line 3, in <module> from django.contrib.auth.base_user import … -
Chained ModelSelect2Widget
I have these models: from django.db import models class ValidationCheckType(models.Model): name = models.CharField(max_length=255) nicename = models.CharField(max_length=255) description = models.CharField(max_length=255, blank=True) def __str__(self): return self.nicename class ValidationCheckTarget(models.Model): name = models.CharField(max_length=255) nicename = models.CharField(max_length=255) type = models.ForeignKey('ValidationCheckType', on_delete=models.PROTECT) def __str__(self): return ' - '.join([self.type.nicename, self.nicename]) class DirectiveCheck(models.Model): directive = models.ForeignKey(Directive, on_delete=models.CASCADE) check_type = models.ForeignKey(ValidationCheckType, on_delete=models.PROTECT, related_name='types') check_target = models.ForeignKey(ValidationCheckTarget, on_delete=models.PROTECT, related_name='targets') target_value = models.CharField(max_length=255, blank=True) So, ValidationCheckType represents the top-level category, filtering ValidationCheckTarget choices to ensure only relevant targets are displayed based on the selected type. Or so it should be. Now to the forms. According to django_select2.forms.ModelSelect2Widget and customizing-a-form I should be able to do something like this: from django import forms from django_select2 import forms as s2forms from .models import DirectiveCheck, ValidationCheckTarget, ValidationCheckType class DirectiveCheckForm(forms.ModelForm): class Meta: model = DirectiveCheck fields = ['check_type', 'check_target', 'target_value'] widgets = { 'check_type': s2forms.ModelSelect2Widget( model=ValidationCheckType, search_fields=['nicename__icontains'], ), 'check_target': s2forms.ModelSelect2Widget( model=ValidationCheckTarget, search_fields=['nicename__icontains'], dependent_fields={'check_type': 'id'}, max_results=10, attrs={ "data-minimum-input-length": 0, "data-placeholder": "Select a check_type first", } ) } The good news is, the check_type dropdown works. The bad news is, the check_target dropdown does not. It does not filter the results according to the selection in check_type. If I access the auto-generated AJAX URL created by the …