Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
I am getting no module name cleo when trying to do "poetry add"
I have completely uninstalled and re installed poetry using: POETRY_UNINSTALL=1 bash -c 'curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python' then I re installed it using: curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - but it did not fix the issue. and then I # for poetry config export PATH="$HOME/.poetry/bin:$PATH" -
How to start django server using wsgi.py, I'm trying to use gunicorn
I'm trying to deploy my server (no longer in development) but I cannot figure out how to deploy it. Documentation from django's website recommends using gunicorn, but it seems like it might be outdated. Either that or I was viewing the tutorial for the wrong version of django. How do I deploy the non-development server using wsgi.py? Earlier it was suggested to me to follow this link but it doesn't appear to actually describe how to go about using wsgi.py. Can someone explain to me how to deploy the server and if I need gunicorn? -
How to config DATETIME_INPUT_FORMATS to accept timestamp?
Is there anyway to accept timestamp as an input for DateField and DateTimeField fields by configuring DATETIME_INPUT_FORMATS? I can convert all my outputs to timestamp using : REST_FRAMEWORK = [ "DATETIME_FORMAT": "%s" ] But it seems having %s for inputs does not work: REST_FRAMEWORK = [ "DATETIME_FORMAT": "%s", "DATETIME_INPUT_FORMATS": ["%s"], ] It raises this validation error: { "my_field_name": [ "Date has wrong format. Use one of these formats instead: %s." ] } -
How do I use foreign key in django to have item sets?
Models.py from django.db import models # Create your models here. class Project_types(models.Model): project_type = models.CharField(max_length=200) def __str__(self): return self.project_type class Projects(models.Model): project_types = models.ForeignKey(Project_types, on_delete=models.CASCADE) project = models.CharField(max_length=200) def __str__(self): return self.project class SourceCode(models.Model): project = models.ForeignKey(Projects, on_delete=models.CASCADE) source_code = models.CharField(max_length=99999) def __str__(self): return self.source_code Views.py from django.shortcuts import render from .models import Project_types, Projects def homepage(response): data = Project_types.objects.all() return render(response, 'main/homepage.html', {'project_types': data}) def hacks(response): return render(response, 'main/hacks.html', {'hacking_projects':"n"}) def games(response): type = Project_types(project_type='games') t = type.projects_set.all() return render(response, 'main/games.html', {'gaming_projects': t}) main/games.html <!DOCTYPE html> <html> <head> <title>My Gaming Projects</title> </head> <body> <header>My Gaming Projects</header> <p>{{gaming_projects}}</p> </body> </html> The problem is when I go into my django admin I clearly have a project by the name of "gaming project" under the project type 'games'. However when displaying it on my site it just shows a empty query. -
Uploading a File from Django FileField to Nex.js public folder
Is there a way to upload a file in Django outside of the project directory? I am trying to upload a file/image from the front-end (Next.js) through a FileField in Django and save it in the public folder of the Next.js project directory as that's where all my images are served from. In this scenario, Django and Next are sibling folders on the server. If I try to upload anything above the Django project folder via FileField, I get the error: Detected path traversal attempt... I can use FileSystemStorage, but this is not supposed to be used in production. How can I upload a file through Django to a folder outside of the project directory and place it in the Next.js public folder successfully? -
Django: list_display accepts field but not list_filter
I have the following admin class: class AppointmentAdmin(admin.ModelAdmin): list_display = ('branch', 'date', 'timeslot', 'sold_to', 'unit', 'VIN') list_filter = ('branch', 'date', 'sold_to', 'unit', 'VIN') def VIN(self, obj): return obj.unit.vin I get the following error: <class 'catalog.admin.AppointmentAdmin'>: (admin.E116) The value of 'list_filter[4]' refers to 'VIN', which does not refer to a Field. If I remove VIN from list_filter, it executes fine. The list_display will show me the field VIN. What am I doing wrong? -
Running python 3 in sandbox with TensorFlow
I am currently trying to make a website which will run user submitted TensorFlow programs, I have the website ready along with the TensorFlow system, but as I do not have much experience with security, I am not sure how I should run user submitted TensorFlow programs securely. The website is written in Django and everything is currently running on a ubuntu virtual machine on a local server, what could be a good way to run the user submitted programs securely and also restrict the compute time of each script to ~ 1 second for each inference? -
Understanding Python UUID
I’m new to python and had been working with UUID mostly as an Android developer as identifiers to send for REST calls. In Java/Android I have never treated UUID as anything other than a character string, passed back and forth (in many cases to Django REST application) Now I am working with Python on my own Django app I recognized that UUID is an object with various methods attached. I am confused. My initial task was to convert the UUID to base 64 (request.user.id is UUID for me) and decode it at a later time. There seems to be a lot of answers here with various approach. It is starting to be more complex. I expected a character string. I would appreciate some clarity and help with understanding UUID object. -
Django: How render two or more FBV into one template
I'd like to direct more then one view to my file.html template. Unfortunly my second view function file_category doesn't render the context in my page. Is there a specific way to do so? Thanks VIEWS def file_view(request, file_id): file = File.objects.filter(pk=file_id) files_p = File.objects.filter(user=request.user.userprofile) context = { 'file': file, 'files_p': files_p , } return render(request, 'file.html', context) def file_category(request): cat = list(for num in range(0, 37)) context = { 'cat': cat } return render(request, 'file.html', context) URLS urlpatterns = [ path('show/<file_id>', views.file_view, name="file"), path('show/<file_id>', views.file_category), ] -
Using django form many to many relationship model
I am quite new to using Django, but basically I have two models: Student and Module class Student(models.Model): student_id = models.CharField(max_length=4, unique=True) name = models.CharField(max_length=150) birthday = models.DateField() class Module(models.Model): name = models.CharField(max_length=150) code = models.IntegerField() student = models.ManyToManyField(Student) Now my question is, basically if I am using a Django form to add new students to the DB, how do I get the list of Modules I have in the DB. I can add students to the module for adding a new module form, but not sure how to do it the other way And say if I want to list all the modules a student is taking in a page, how do I access the modules those students are access to aswell? Any help is much appreciated -
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