Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
What should my API endpoint look like in production?
I might be blocked from stackoverflow for asking this but I really don't know what to do. I guess I have to take the odds. I have this web app. Frontend is written with VueJS, backend with Django rest framework, and I am using MongoDB with docker volumes. On the Home page of my web app, Frontend sends a GET request to backend on /api/skills endpoint. When I handle things locally, everything is fine. I dockerize the frontend, backend, MongoDB and they all talk to each other in the same Docker network. This is looking nice on local development. The part that does the fetching looks like this. fetchSkillData: function () { const localUrl = "http://0.0.0.0:8000/api/skills"; axios .get(localUrl) .then((values) => { values.data.forEach((data) => { this.technologies.push(data); this.hideSpinner(); }); }) .catch(console.error); this.hideSpinner(); } I am not getting a CORS issue or anything else. However, on production, I have some issues. This is the Dockerfile for frontend: # build stage FROM node:13-alpine as build-stage RUN mkdir -p /home/app COPY ./frontend /home/app WORKDIR /home/app RUN npm install RUN npm install --save ant-design-vue RUN npm install --save mavon-editor RUN npm install --save axios RUN npm install --save raw-loader RUN npm run build # production stage … -
Issue with displaying alerts after failed logins
I am implementing a website as my final project and I want to display a message for users that failed to log in more than 3 times prompting them to reset their passwords. I have already tried different solutions I found online, but nothing is helping. I am writing the backend in Django, but Django-axes also didn't work for me, so I am trying JS now. <script type="text/javascript"> var login_attempts = 3; function checkAttempts() { var failed_alert = document.querySelectorAll("a")[0].textContent; if (failed_alert === " Invalid username or password ") { login_attempts--; console.log(login_attempts); alert('failed login') if (login_attempts==0) { alert("Do you want to reset your password?"); } } else { console.log(login_attempts); return false; } } </script> This is the example I found on Stack Overflow. I think I am close to solving this problem, I am getting messages, but when printing "login_attemps" in a console at first I get 3 and then continuously 2, no matter how many times I write incorrect password. The function is called in form. I also tried to do it in body onload="" and onsubmit <form id="login-form" class="form" action="login" method="post" onsubmit="checkAttempts();"> The whole authentication is implemented in views.py django: def login(request): if request.user.is_authenticated: return redirect('/') else: if request.method … -
Django rest api how to response serialized queryset
I have 3 models: class Book_type(models.Model): type_name = models.CharField(max_length=40,unique=True) class Author(models.Model): author_id = models.AutoField(unique=True, primary_key=True) author_name = models.CharField(max_length=30, unique=True) class Book(models.Model): book_id = models.AutoField(unique=True, primary_key=True) book_type = models.ForeignKey(book_type, on_delete=models.CASCADE, to_field='type_name') book_value = models.PositiveIntegerField(default=0, verbose_name='book value') book_unit = models.CharField(max_length=100, blank=True, verbose_name='book unit') book_time = models.DateTimeField(auto_now=False, verbose_name='book time') author = models.ForeignKey(verbose_name='author', to='author', to_field='author_id', on_delete=models.CASCADE) Both Book_type and Author are foreign keys to Book. Now in the views.py I want to return the following aggregate statistics for each author: 1.mininum book value, grouped by author and book type 2.average book value, grouped by author and book type 3.And annotate each set of aggregate statistics with the author's ID and name. Code: from .serializers import BookSerializer,AuthorSerializer,Book_typeSerializer class AggregateListView(ListAPIView): """Custom queryset api view. Does not implement pagination""" queryset = author.objects.values('author_name', 'author_id')\ .annotate(min_value=Min('book__book_value'), distinct=True)\ .annotate(max_value=Max('book__book_value'), distinct=True)\ .annotate(avg_value=Avg('book__book_value'), distinct=True)\ .annotate(count=Count('book__book_id'), distinct=True)\ .annotate(earliest_time=Max('book__book_time'), distinct=True)\ .annotate(lastest_time=Min('book__book_time'), distinct=True) serializer = AuthorSerializer(queryset, many=True) data = serializer.data return data["json"] While coded here I totally no clew how to continue, any friend can help ? -
JSONDecodeError at /update_item/ Expecting value: line 1 column 1 (char 0)
I’m a beginner. I have tried everything in the Django E-commerce website course, but it does not work for me. I also tried documentation but I didn’t get any solution. I have this error when I go to /update_item/ and the data is not showing up in the terminal: Expecting value: line 1 column 1 (char 0) error screenshot tutorial link tutorial link https://youtu.be/woORrr3QNh8 cart.js var updateBtns = document.getElementsByClassName('update-cart') for (i = 0; i < updateBtns.length; i++) { updateBtns[i].addEventListener('click', function(){ var productId = this.dataset.product var action = this.dataset.action console.log('productId:', productId, 'Action:', action) console.log('USER:', user) }) } function updateUserOrder(productId, action){ console.log('User is authenticated, sending data...') var url = '/update_item/' fetch(url, { method:'POST', headers:{ 'Content-Type':'application/json', 'X-CSRFToken':csrftoken, }, body:JSON.stringify({'productId':productId, 'action':action}) }) .then((response) => { return response.json(); }) .then((data) => { location.reload() }); } views.py def updateItem(request): data = json.loads(request.body) productId = data['productId'] action = data['action'] print("Action",action) print("Pordutcs:",productId) customer = request.user.customer product = Product.objects.get(id=productId) order, created = Order.objects.get_or_create(customer=customer , complete=False) orderitem, created = Orderitem.objects.get_or_create(order= order,product=product) if action == 'add': orderitem.quantity = (orderitem.quantitiy +1) elif action == 'remove': orderitem.quantity = (orderitem.quantity -1) orderitem.save() if orderitem.quantity <= 0: orderitem.delete() return JsonResponse("Item was added", safe=False) store.html {% extends 'store/main.html' %} {% load static %} {% block content … -
How to get url params from the HttpRequest object
Suppose, we have a url path: path('something/<int:some_param>/test/', views.some_view) When a user hits this url, django makes an instance of HttpRequest, that will be passed to the some_view view. Is there a way to get the some_param url parameter from the request object outside the some_view code? (for instance, to do some processing that depends on some_param in a custom middleware). One possible solution is to parse the HttpRequest.path attribute, but is there any prebuilt way to do this? -
Is there a way to show Django Matplotlib graphic in the model list?
I added a graphic that shows the % of users that have a non-default picture on my platform, and I can see the graphic with no problems when I enter the modify section. Modify section But when I enter to the model list it's shown this way: Model list What I want to do is to show the same picture in the modify section, but in the model list. I managed to do this with user pictures adding a javascript script to the admin html but I find no way to do this in here. {% extends "admin/change_list.html" %} {% load static %} {% block content %} <!-- Render the rest of the ChangeList view by calling block.super --> <script> window.onload = function(){ textFigure = document.querySelectorAll(".field-figure") } </script> {{ block.super }} {% endblock %} This is what I could do to get to the model list and retrieve each graphic figure but I can't find a way to transform the list to images. figures.py import matplotlib.pyplot as plt from login.models import Usuario def grafico(): usrsSinFoto = Usuario.objects.filter(profilepicture = "fotos_perfil/foto_default.png").count() usrsConFoto = Usuario.objects.all().count() - usrsSinFoto labels = 'Usuarios sin foto', "Usuarios con foto" sizes = [usrsSinFoto, usrsConFoto] explode = (0, 0.1) … -
Upload File not uploading in server storage
Is it true, when we serialize a image file using serializer, serializer doesnt upload file to media, it just confirm that file is a image file and change the value in model. So, i need function below in view.py for write file to my server storage file. def handle_uploaded_file(f): with open(f'media/{f}', 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) example model file class Product(models.Model): date_added = models.DateField(auto_now=True) name = models.CharField(max_length=50) availability = models.DecimalField(max_digits=5, decimal_places=1) price = models.DecimalField(max_digits=8, decimal_places=1) image = models.ImageField(upload_to='media', blank=True, null=True) example serializer class UpdateProductSerializer (serializers.ModelSerializer): class Meta: model = Product fields = '__all__' -
How do I get my wsgi module recognized when starting Python via docker?
I'm using Django 3.2 and Python 3.9. I have this directory structure - docker-compose.yml + web - Dockerfile - manage.py - requirements.txt + venv - ... + directory - settings.py - wsgi.py My wsgi.py file looks like the below import time import traceback import signal import sys import pathlib from django.core.handlers.wsgi import WSGIHandler import os # add the hellodjango project path into the sys.path sys.path.append(pathlib.Path(__file__).parent.parent.parent.absolute()) # poiting to the project settings os.environ.setdefault("DJANGO_SETTINGS_MODULE", "directory.settings") from django.core.wsgi import get_wsgi_application try: application = get_wsgi_application() except Exception: # Error loading applications if 'mod_wsgi' in sys.modules: traceback.print_exc() os.kill(os.getpid(), signal.SIGINT) time.sleep(2.5) My docker-compose.yml Python section looks like this web: restart: always build: ./web ports: # to access the container from outside - "8000:8000" env_file: .env environment: DEBUG: 'true' command: /app/run_server.sh volumes: - ./web/:/app depends_on: - postgres The "run_server.sh" script looks like #!/bin/bash cd /app .venv/bin/activate python manage.py runserver 0.0.0.0:8000 but when I run "docker-compose up," I get this error complaining about not being able to find the wsgi module web_1 | Exception in thread django-main-thread: web_1 | Traceback (most recent call last): web_1 | File "/usr/local/lib/python3.9/site-packages/django/utils/module_loading.py", line 20, in import_string web_1 | return getattr(module, class_name) web_1 | AttributeError: module 'directory.wsgi' has no attribute 'application' web_1 | … -
How to keep track of anonymous session in Django and React
I have a cart in django that uses session to track the user. The cart is created when the user adds an item to cart, also checks if the cart existed by session id. But when I run an add to cart mutation in react, Django creates a new cart every time. -
DRF Create new object and link to (but not create) it's related items (nested serializer)?
I'm trying to link multiple items (subdomains) to an item being created (evidence). My form submits okay - but I'm trying to figure out the 'best' way to go about this. According to the docs I have to override the create method - but their example shows them 'creating' the related objects. I don't want to do that. I want to just just add those related items to the piece of evidence I am creating (to create the relationship) Here are my serializers: class SubdomainSerializer(serializers.ModelSerializer): class Meta: model = Subdomain fields = [ "id", "domain", "short_description", "long_description", "character_code", ] class EvidenceSerializer(serializers.ModelSerializer): """ """ created_by = serializers.HiddenField( default=serializers.CurrentUserDefault() ) updated_by = serializers.HiddenField( default=serializers.CurrentUserDefault() ) absolute_url = serializers.SerializerMethodField() created_by_name = serializers.SerializerMethodField() updated_by_name = serializers.SerializerMethodField() subdomains = SubdomainSerializer(many=True) class Meta: model = Evidence fields = "__all__" extra_kwargs = { "subdomains": { "error_messages": { "null": "This field is required.", "blank": "This field is required.", } }, } def get_absolute_url(self, obj): return obj.get_absolute_url() def get_created_by_name(self, obj): return obj.created_by.full_name def get_updated_by_name(self, obj): return obj.updated_by.full_name def create(self, validated_data): subdomains_data = validated_data.pop("subdomains") evidence = Evidence.objects.create(**validated_data) for subdomain in subdomains_data: # This is where I want to add the subdomains to the evidence - not create ones - how … -
How to obtain country from a column in a database python
Actually i am using pygeoip from obtain the country from the ip address and it works but now i want to obtain the country from a data in a database, im using django so after i obtain the ip and the country from each data i want to save the country in a new column in the actually database anyone can help me please :c -
Can I OR Exists subqueries in Django?
I want to be able to or two Exists subqueries. This is the best solution I could come up with: def my_filter(self, queryset, name, value): model_a_qs = ModelA.objects.filter(id=OuterRef('a_id')) model_b_qs = ModelB.objects.filter(id=OuterRef('b_id')) return queryset.annotate( has_a=Exists(model_a_qs), has_b=Exists(model_b_qs), has_a_or_b=Case( When(has_a=True, then=Value(True)), When(has_b=True, then=Value(True)), default=False, output_field=BooleanField(), ), ).filter(has_a_or_b=value) Does anyone know a better way to do this? Thank you in advance! -
django-summernote - I want Image url in .png format instead of Base64
This is the url summernote geenrates. <img src="data:image/jpeg;base64,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 It should be: <img src="/images/blah/blah.jpg."> This is the summernote code i have: <textarea id="summernote" name="editordata"></textarea> <script> $('#summernote').summernote({ placeholder: 'Hello', tabsize: 2, height: 100 }); </script> -
Run MQTT client inside Django
On Connect rc: 0 Subscribed: application/13/device/0090000000000003/status On Connect rc: 0 Subscribed: application/13/device/0090000000000003/status On Connect rc: 0 Subscribed: application/13/device/0090000000000003/status On Connect rc: 0 Subscribed: application/13/device/0090000000000003/status On Connect rc: 0 Subscribed: application/13/device/0090000000000003/status On Connect rc: 0 Subscribed: application/13/device/0090000000000003/status On Connect rc: 0 Subscribed: application/13/device/0090000000000003/status On Connect rc: 0 Subscribed: application/13/device/0090000000000003/status On Connect rc: 0 I am trying to run the MQTTC client inside my Django application, and I run this function in APP config , but on App start why is it calling call-backs multiple times that stays in question, I want this function to be executed only once , how do i prevent this behaviour of Django , i tried using thread pool but same result mqttc = mqtt.Client(clientId) mqttc.on_connect = on_connect mqttc.on_subscribe = on_subscribe mqttc.on_message = on_message mqttc.connect(broker, port=port) def check_device(instance=None): global topic_list print(' Mqttc broker called ') logging.basicConfig(level=logging.DEBUG) mqttc.loop_start() class DashboardConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'dashboard' def ready(self): from .schedulars import scheduler,check_device # scheduler.start() # executor = threadpool(max_workers=2) # executor.submit(check_device) check_device() -
Desired output is not coming in django
I was trying to make a poll app in django , so for that I used bootstrap for frontend . I copied navbar text from there and copied in index.html file and I linked all the URLs to each but after running the server I'm getting such kind of output. Can anyone help me , how can I avoid this problem ? Thanks in advance -
Django REST Framework how to aggregate from related models
I have 3 models: class Book_type(models.Model): type_name = models.CharField(max_length=40,unique=True) class Author(models.Model): author_id = models.AutoField(unique=True, primary_key=True) author_name = models.CharField(max_length=30, unique=True) class Book(models.Model): book_id = models.AutoField(unique=True, primary_key=True) book_type = models.ForeignKey(book_type, on_delete=models.CASCADE, to_field='type_name') book_value = models.PositiveIntegerField(default=0, verbose_name='book value') book_unit = models.CharField(max_length=100, blank=True, verbose_name='book unit') book_time = models.DateTimeField(auto_now=False, verbose_name='book time') author = models.ForeignKey(verbose_name='author', to='author', to_field='author_id', on_delete=models.CASCADE) Both Book_type and Author are foreign keys to Book. Now in the views.py I want to return the following aggregate statistics for each author: mininum book value, grouped by author and book type average book value, grouped by author and book type And annotate each set of aggregate statistics with the author's ID and name. Code: from .serializers import BookSerializer,AuthorSerializer,Book_typeSerializer class AggregateListView(ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer def get_queryset(self): mininum_qs = self.get_queryset().min(book_value) average_qs = self.get_queryset().average(book_value) return new_qs.union(mininum_qs, average_qs, all=True) While coded here I totally no clew how to continue, any friend can help ? -
Integrated dash-app (using django_plotly_dash) does not get enough space
I am integrating a dash-app into django for the first time. I use django_plotly_dash for this. I think I am doing it the standard way: urls.py from django.urls import path, include from . import views urlpatterns = [ path('trial',views.trial,name='trial'), ] views.py from django.shortcuts import render from django.http import HttpResponse import my_first_dash_plotly_app.simple_dash_app def trial(request): return render(request, 'my_first_dash_plotly_app/trial.html') simple_dash_app.py import dash_core_components as dcc import dash_html_components as html import plotly.express as px import pandas as pd from django_plotly_dash import DjangoDash app = DjangoDash('SimpleExample1') # assume you have a "long-form" data frame # see https://plotly.com/python/px-arguments/ for more options df = pd.DataFrame({ "Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"], "Amount": [4, 1, 2, 2, 4, 5], "City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"] }) fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group") app.layout = html.Div(style={}, children=[ dcc.Graph( id='example-graph-2', figure=fig ) ]) trial.html {%load plotly_dash%} {%plotly_app name="SimpleExample1"%} This is just the standard-example from the plotly/dash-introduction. It works somehow but looks really ugly. You have to scroll to see the plot completely. If I remember correctly I have seen this behaviour before outside of the django-world. Is there an easy fix? Should I file a bug-report on that or is it just me doing something completely wrong? I … -
Django - get autocomplete search result from 2 models
I have written a function that enables users to look for titles in my Product and Article model I am using trevoreyre autocomplete-js library to handle autocomplete live search. The problem I am currently facing is that I want to include titles from Article and Product models in my autocomplete search bar. From what I read JsonResponse doesn't take context as a parameter. My question is how can I include the title field from both models without context parameters? views.py from product.models import Product from articles.models import Article from django.db.models import Q from django.contrib.auth.decorators import login_required from django.shortcuts import render from django.http import JsonResponse @login_required def search_address(request): title = request.GET.get('title') payload = [] if title: address_objects = Article.objects.filter(title__icontains=title) for address_object in address_objects: payload.append(address_object.title) return JsonResponse({'status':200, 'data': payload}) @login_required def search_results(request): query = request.GET.get('q') article = Article.objects.all() product = Product.objects.all() if query is not None: lookups = Q(title__icontains=query) article = Article.objects.filter(lookups) product = Product.objects.filter(lookups) context = { 'article_list': article, 'product_list': product } return render(request, 'search/search_view.html', context) base.html <!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="description" content="Starlab platform" /> <meta name="author" content="Pathfinder 23" /> <title>Starlab - {% block title %}{% endblock %}</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> … -
Django signals not working, tried every possible solution
signals.py @receiver(user_logged_in, sender=User) def when_user_logs_in(sender, request, **kwargs): print('user_logs_signal is called') LoggedInUser.objects.get_or_create(user=kwargs.get('user')) @receiver(user_logged_out, sender=User) def when_user_logs_out(sender, request, **kwargs): print('user logs out signal iscalled') LoggedInUser.objects.get_or_create(user=kwargs.get('user')).delete() models.py class LoggedInUser(models.Model): user = models.OneToOneField(User, related_name='logged_in_user', on_delete =models.CASCADE, null=True, blank=True) session_key = models.CharField(max_length=32, null=True, blank=True) def __str__(self): return self.user.username apps.py class AccountsConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "accounts" def ready(self): import accounts.signals I have done anything that i found to solve signals now working but it didnt solve i have even added "accounts.apps.AccountsConfig" in my settings.py but still it not firing i am currently logged_in and using jwt based authentication , needs help -
Django: Submitting two forms on one page and using data from first form in second form
so currently I have a web page where the user can select stats they want and then generate a march madness bracket. If they decide they like the bracket they can name it and save it. I want to save the bracket as well as the stats chosen. My issue is that I have two forms on one page, so when the user presses the save button, the stats variables are all empty since their values were assigned in the request for the other form. Basically the second form clears all data from the first form, but I want to use data from the first form in the second form. Here is my code. HTML: <form method="GET"> {% csrf_token %} <label for="stat1">Most Important Stat:</label> <select name="stat1" id="stat1"> <option value="Stat 1">Stat 1</option> <option value="Stat 2">Stat 2</option> <option value="Stat 3">Stat 3</option> <option value="Stat 4">Stat 4</option> <option value="Stat 5">stat 5</option> </select> <label for="stat2">Second Most Important Stat:</label> <select name="stat2" id="stat2"> <option value="Stat 1">Stat 1</option> <option value="Stat 2">Stat 2</option> <option value="Stat 3">Stat 3</option> <option value="Stat 4">Stat 4</option> <option value="Stat 5">stat 5</option> </select> <label for="stat3">Third Most Important Stat:</label> <select name="stat3" id="stat3"> <option value="Stat 1">Stat 1</option> <option value="Stat 2">Stat 2</option> <option value="Stat 3">Stat 3</option> <option value="Stat 4">Stat … -
400. That’s an error. Your client has issued a malformed or illegal request. That’s all we know - Google App Engine Django App
I have been programming an API using Django and djangorestframework for deployment in Google App Engine. The API is basically a package registry, so you can create, update, get, and delete packages with the API. All the endpoints seem to work except for one. The only endpoint that doesn't work is one that display a paginated list of all packages in the online registry. All the endpoints are working, but for some reason, when I hit the specific endpoint '/packages/', GCP gives me the error 400. That’s an error. Your client has issued a malformed or illegal request. That’s all we know When I run the application locally on my computer, all the endpoints work perfectly. The application only stops working for that specific route when I deploy it on Google App Engine.The API payload should be: [ { "Name": "*" } ] I am completely lost on this one and would appreciate any help. VIEWS.py import django.db.utils from rest_framework.decorators import api_view from rest_framework.response import Response from django.core.paginator import Paginator, EmptyPage import registry.models from .serializers import * from .models import * # Create your views here. @api_view(['GET']) def apiOverview(request): api_urls = { 'List': '/package-list/', 'Create': '/package-create/', 'Update': '/package-update/', 'Delete': '/package-delete/', … -
While Calling Django Api On React Error is No 'Access-Control-Allow-Origin' header is present on the requested resource
Anyone Please Help me I need to submit my project this week I am getting a problem for a week. Error is :--> Access to XMLHttpRequest at 'http://127.0.0.1:8000/list/single/2' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Please Help me 😢 -
Update or create bunch of rows - Django
I'm trying to find the most efficient way to update or create a bunch of rows (around 10K to 30k) from a json in my database. I'm grabbing a json with the data I want to put in my database. I tried Django atomic transactions but it is still very slow. I'm currently using this library but it is very slow: it takes around 1 hour to update 15k rows. But this is the shortest way I've found today. I read a lot of questions and articles but I can't find a fastest way to do it. This is how my update methods look like (using the library): def update_data_in_db(data): objs = [] for item in data: try: objs.append(Item( id=item['id'], name=item.get('name'), slug=item.get('slug'), except Exception as err: logger.exception(err) print(err) try: Currency.objects.bulk_update_or_create(objs, ['name', 'slug'], match_field='id') except Exception as err: print(err) return [obj.id for obj in objs] -
Django add filter to ForeignKey drop-down
In my Django application I have Items and Locations. Each Item could be linked to a Location. On the Item view, I want that the user can only select Locations he owns. Given the following models: from django.conf import settings from rules.contrib.models import RulesModel # Create your models here. class Location(RulesModel): name = models.CharField(max_length=200) description = models.TextField(blank=True) owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) class Item(RulesModel): name = models.CharField(max_length=200) description = models.TextField(blank=True) location = models.ForeignKey( Location, on_delete=models.SET_NULL, null=True, blank=True ) owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) How can I specify a filter to restrict the Locations available in the view? from django.views import generic from django.contrib.auth.mixins import LoginRequiredMixin # Create your views here. from .models import Item class ItemCreateView(LoginRequiredMixin, generic.CreateView): model = Item fields = [ "name", "description", "location", "owner", ] success_url = reverse_lazy("item:item-list") def get_initial(self): return {"owner": self.request.user.id} I've tried to add def __init__() to the view and specifying limit_choices_to in the model, both without success. Any other idea? -
Module 'module' has no attribute 'celery'
I need to use Celery at my project but i got some errors when i try to install at my project. I've read the Celery's doc for Django, but i've been taking the same error. My tree project : 📂 src 📄 __init__.py 📄 celery.py 📂 core 📄 __init__.py 📂 project_auth 📄 __init__.py 📄 serializer.py 📄 tasks.py 📄 settings.py 📄 urls.py 📄 wsgi.py 📄 texto.md src/_init_.py : # This will make sure the app is always imported when # Django starts so that shared_task will use this app. from .celery import app as celery_app __all__ = ('celery_app',) src/celery.py : import os from celery import Celery from django.conf import settings os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'src.settings') app = Celery('src') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) @app.task(bind=True) def debug_task(self): print(f'Request: {self.request!r}') src/settings.py : INSTALLED_APPS = [ #Django apps : 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #Meus apps : 'src.core', 'src.project_auth', 'src.product', #Apps de terceiros : 'django_celery_results', 'rest_framework', "rest_framework.authtoken", ] CELERY_CONFIG = { "CELERY_TASK_SERIALIZER": "json", "CELERY_ACCEPT_CONTENT": ["json"], "CELERY_RESULT_SERIALIZER": "json", "CELERY_RESULT_BACKEND": None, "CELERY_TIMEZONE": "UTC", "CELERY_ENABLE_UTC": True, "CELERY_ENABLE_REMOTE_CONTROL": False, } docker-compose.yml: version: "3.8" services: web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - 8000:8000 depends_on: - db tty: true container_name: ${COMPOSE_PROJECT_NAME}_app db: container_name: ${COMPOSE_PROJECT_NAME}_db image: postgres:14 environment: …