Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
Uploading files show permission denied (CentOS7 + Apache + mod_wsgi + django)
I deployed a beta version of my django app to DigitalOcean and I am serving it using Apache and WSGI. Everything works well include static files and 'get' media files(I saved it directly to DB), except uploading files. It shows 'Permission denied' error, with full directory like '/home/test/project/media/test.jpeg'. I configured httpd-vhosts like this. <VirtualHost *:80> ServerName example.com ServerAlias www.example.com WSGIScriptAlias / /home/test/project/project/wsgi.py WSGIDaemonProcess example.com python-home=/home/test/project/.venv python-path=/home/test/project/project WSGIProcessGroup example.com Alias /static/ /home/test/project/frontend/build/static/ # react build dir <Directory /home/test/project/frontend/build/static> Require all granted </Directory> Alias /uploadImg/ /home/test/project/media/ <Directory /home/test/project/media> Require all granted </Directory> <Directory /home/test/project/project> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost> So httpd is running with daemon, and my directory 'media' is owned by root, 755. But the directory 'media' is symbolic link dir which located at '/home/test/' I did many attempts to fix it but nothing works.. -
How to calculate the percentage of 5 stars, 4 stars rating for an object
I have this rating for my review django model. 5 star 4 star 3 star 2 star 1 star What I want to do is get the percentage of each component based on the rating. Something like this: # get 5 average rating five_avg_rating = qs.filter(rating=5).aggregate(Avg('rating'))['rating__avg'] five_avg_rating = (five_avg_rating / 5) * 100 if five_avg_rating != None else 0.0 # get 4 average rating four_avg_rating = qs.filter(rating=4).aggregate(Avg('rating'))['rating__avg'] four_avg_rating = (four_avg_rating / 5) * 100 if four_avg_rating != None else 0.0 .... # get 1 average rating one_avg_rating = qs.filter(rating=1).aggregate(Avg('rating'))['rating__avg'] one_avg_rating = (one_avg_rating / 5) * 100 if one_avg_rating != None else 0.0 The sum up percentages should = 100%. So if the math is correct, add all the rating percentages should = 100% Here is an image of what I get now, which is not what I really want: enter image description here How can I implement this better? -
Django: psycopg2.errors.UndefinedColumn
I have an app called map. Within map, I have the following models being specificed: class Checkin(models.Model): time = models.DateTimeField() class Pin(models.Model): name = models.CharField(max_length=64) latitude = models.FloatField() longitude = models.FloatField() user = models.ForeignKey(User, on_delete=models.CASCADE) place_id = models.TextField(default=None, null=True) address = models.TextField(default=None, null=True, blank=True) checkins = models.ForeignKey(Checkin, on_delete=models.CASCADE, default=None, null=True) class Meta: unique_together = ["name", "latitude", "longitude"] The migrations work fine. However, when I try to access the class Pin via the admin panel, I get this error message: psycopg2.errors.UndefinedColumn: column map_pin.checkins_id does not exist LINE 1: ...r_id", "map_pin"."place_id", "map_pin"."address", "map_pin".... If I try to access the class Pin via Pin.objects.all() I also receive the same error. -
I wanna update a value to request with React axios from Django
This is one of value in Django api. { "id": 89, "text": "dd", "checked": false }, { "id": 90, "text": "dd", "checked": false }, } I wanna update the "checked" value like true/false to request with react axios. Like a check toggle button. const [check, setCheck] = useState(false); return ( <> <button onClick = { () => setCheck(!check) }>X <div className = {todo ${check && 'checked'}}>{ text } </> ); -
Make a query with Django ORM?
I have used this code to make a query: views.py: reservations_table = Reservation.objects.all() total_commission = 0 for reservation in reservations_table: for city in COMMISSION_RATES.keys(): if reservation.city == city.upper(): total_commission += reservation.net_income * COMMISSION_RATES[city] / 100 models.py: from django.db import models class Reservation(models.Model): reservation_code = models.CharField(max_length=150,unique=True) checkin = models.DateField() checkout = models.DateField() flat = models.CharField(max_length=150) city = models.CharField(max_length=150) net_income = models.DecimalField(max_digits=10, decimal_places=2) def __str__(self): return self.reservation_code constants.py: COMMISSION_RATES = { 'LONDON': 10, 'PARIS': 12, 'PORTO': 9, } How to make a query but using only Django ORM? -
Get the total count of object with specific status
Trying to get the total count of objects to display on the homepage. Here's my code def dashboard(request): total_issues = Issue.objects.all().count() open_issues = Issue.objects.filter(mark_as='Open').count() closed_issues = Issue.objects.filter(mark_as='Closed').count() context = {'ordered_issues': ordered_issues, 'total_issues': total_issues, 'open_issues': open_issues, 'closed_issues': closed_issues} return render(request, 'issues/total_issues.html', context) and my model class Issue(models.Model): MARK_AS = ((True, 'Open'), (False, 'Closed')) title = models.CharField(max_length=100) content = models.TextField() date_posted = models.DateTimeField(default=timezone.now) author = models.ForeignKey(User, on_delete=models.CASCADE) assignee = models.ForeignKey(Profile, on_delete=models.SET_NULL, null=True, blank=True) mark_as = models.BooleanField(choices=MARK_AS, default=True) def __str__(self): return self.title def get_absolute_url(self): return reverse('issue-detail', kwargs={'pk': self.pk}) Nothing get outputted What did I do wrong? -
Can we filter out just the domain name from a link in a TextField object using urlize and a custom method?
Is it possible to use urlize and a custom filtering method in a TextField object to filter out the domain part of the URL, leaving the suffix and the prefix? For example: in, "hey this is a link https://www.google.com" we filter it out and the result looks something like this "hey this is a link google". I would really appreciate it if someone can help, thx! template {% for blog in blog %} <div class="description">{{ blog.description | urlizetrunc:20 }}</div> {% endfor %} -
Rotate native iPhone images based on EXIF info?
Working on a site where users can upload photos. As many of you many know, unedited iPhone photos use an "Orientation" EXIF tag to determine orientation. On my PC, I can't upload .HEIC files, and I can't upload files if I do manage.py runserver localhostIP:8000 due to SSL reasons, so it's pretty difficult to debug. Looking at the EXIF data on iPhone photos it seems like this should rotate the iPhone images properly, but they still upload with the incorrect orientation, and I can't really look at the what EXIF tags iPhone pictures are returning in the backend. im = Image.open(self.content_media) img_exif = im.getexif() for key, val in img_exif.items(): print(val) if "rotate 90 cw" in str(val).lower(): im.rotate(90) if "rotate 180 cw" in str(val).lower(): im.rotate(180) if "rotate 270 cw" in str(val).lower(): im.rotate(270) This is in the save method for one of my models that has media. -
Django - Regex validator does not show error message on wrong input
I used Regex Validator to validate phone_number field, the validator worked perfectly and saved only proper values. If the phone_number is entered in the wrong format, the form is not saved, however the error message is not showing up. I checked this Django regex validator message is not showing up, however I am not sure what I am missing. Here is my code: models.py from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager from django.core.validators import RegexValidator # Create your models here. class MyAccountManager(BaseUserManager): def create_user(self, first_name, last_name, username, email, password=None): if not email: raise ValueError('User must have an email address') if not username: raise ValueError('User must have an username') user = self.model( email = self.normalize_email(email), username = username, first_name = first_name, last_name = last_name, ) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, first_name, last_name, email, username, password): user = self.create_user( email = self.normalize_email(email), username = username, password = password, first_name = first_name, last_name = last_name, ) user.is_admin = True user.is_active = True user.is_staff = True user.is_superadmin = True user.save(using=self._db) return user class Account(AbstractBaseUser): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) username = models.CharField(max_length=50, unique=True) email = models.EmailField(max_length=100, unique=True) phone_number = models.CharField(validators=[RegexValidator(regex=r'^\+?1?\d{9,10}$', message='Invalid Phone Number', code='invalid_phone_number')], max_length=10, blank=True) # validators should be … -
How to redirect using a view name in Django, class-based views?
I have to redirect from one class-based View to another class-based View. I did it by: return redirect('report') but the suggestion was to redirect by View names. I did try this, but it doesn't work. views.py: class UploadView(View): def get(self, request, *args, **kwargs): Reservation.objects.all().delete() template = "ReportApp/upload.html" return render(request, template) def post(self, request, *args, **kwargs): # try: csv_file = request.FILES['file'] data_set = csv_file.read().decode('UTF-8') # setup a stream which is when we loop through each line we are able to handle a data in a stream io_string = io.StringIO(data_set) next(io_string) for column in csv.reader(io_string, delimiter=',', quotechar="|"): _ = Reservation.objects.update_or_create( reservation_code=column[0], checkin=column[1], checkout=column[2], flat=column[3], city=column[4], net_income=column[5], ) # return redirect('report') return redirect(ReportView.as_view()) upload_view = UploadView.as_view() class ReportView(View): def get(self, request, *args, **kwargs): urls.py: from .views import upload_view, report_view, city_commission_view, error_view from django.urls import path urlpatterns = [ path('upload', upload_view, name='upload'), path('report', report_view, name='report'), path('city_commission', city_commission_view, name='city_commission'), path('error', error_view, name='error'), ] any suggestions how to do this? -
How to add a given number of days to a django DateTimeField
I have a model with a field containing a DateTimeField and a function to calculate a return date based on this DateTimeField. How would I add a given number of days to this???? class MyModel(models.Model): startdate = models.DateTimeField(auto_now_add=True) enddate = models.DateField() def save(self) self.enddate = self.startdate + datetime.timedelta(days=5) super(MyModel, self).save(*args, **kwargs) This however does not work -
How to deal with time consuming python functions in Heroku?
I have successfully deployed a Django app to Heroku using Postgres. The only problem is that some of the python functions I have written can take up to several minutes to run (data scraping many pages with selenium and generating 50 different deep learning models with keras). If it takes longer than 30 seconds the app crashes. I ultimately plan on using this Heroku app as an API that I will connect to a frontend using React on netlify. Is there a way to automatically run these functions behind the scenes somehow? If not, how can I deploy a website that runs time consuming python functions in the backend and uses React for the frontend? -
Django 100% cpu usage, can't imagine it should be like that
[htop command on webserver][1] I am experiencing 100% cpu load on our webserver that is running a django application. It's a virtualized ubuntu 20. I just cannot imagine that it should be like that, do you know how to check what the issue might be? [VM has 5 Cores of an I7-7700K][2] [1]: https://i.stack.imgur.com/U53wE.jpg [2]: https://i.stack.imgur.com/0tcVg.png -
ChannelsLiveServerTestCase throwing URL not found
I'm wrtiting tests for my app which is a websocket app; well actually I wrote those tests and they worked but after I wrote a custom adapter for allauth, for a specific url it started throwing url not found error. I've defined my urls like this: project urls.py: urlpattens = [ ... path("messenger/", include("messenger.urls", namespace="messenger")), ... ] And then in messenger/urls.py: app_name = "messenger" urlpatterns = [ ... path("", views.chats_list_view, name="home"), ... ] Now, this is my tests.py: class TestConsumers(ChannelsLiveServerTestCase): serve_static = True # === SetUp === @classmethod def _set_chrome_options(cls): chrome_options = webdriver.chrome.options.Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_prefs = dict() chrome_options.experimental_options["prefs"] = chrome_prefs chrome_prefs["profile.default_content_settings"] = {"images": 2} return chrome_options @classmethod def _create_driver(cls, stores_logs=False): d = DesiredCapabilities.CHROME if stores_logs: d["goog:loggingPrefs"] = {'browser': 'ALL'} return webdriver.Chrome( options=cls._set_chrome_options(), executable_path="/usr/src/app/chromedriver/chromedriver", desired_capabilities=d, ) @classmethod def setUpClass(cls): super().setUpClass() try: cls.driver = cls._create_driver() except: super().tearDownClass() raise @classmethod def tearDownClass(cls): cls.driver.close() super().tearDownClass() # === Utility === def _create_user(self, driver, user_type, username="test", password="123456789", first_name="test", last_name="test"): user = get_user_model().objects.create_user( username=username, password=password, user_type=user_type, first_name=first_name, last_name=last_name, ) force_login(user, driver, self.live_server_url) return user def _create_principal_user(self, username="test", password="123456789", school_name="test school"): user = self._create_user(self.driver, username=username, password=password, user_type="SS") School.objects.create(name=school_name, support=user) return user def _create_a_group(self, driver, name="Test Group"): """ Create a chat group in the messenger app. return: … -
Heroku reject push project
i try to publish my python project but i have some issues can you help me ? i have requirements.txt also i add my git profile this is my first time with heroku i don't understand what is wrong i add my project on git repository and main branch i use python 3 this is my python project my project files and git files are in same level i tried something is i found on internet but it not worked for me and this is heroku error : -----> Building on the Heroku-20 stack -----> Using buildpack: heroku/python -----> Python app detected -----> No Python version was specified. Using the buildpack default: python-3.10.4 To use a different version, see: https://devcenter.heroku.com/articles/python-runtimes -----> Installing python-3.10.4 -----> Installing pip 22.0.4, setuptools 60.10.0 and wheel 0.37.1 -----> Installing SQLite3 -----> Installing requirements with pip Collecting APScheduler==3.9.1 Downloading APScheduler-3.9.1-py2.py3-none-any.whl (59 kB) Collecting asgiref==3.5.0 Downloading asgiref-3.5.0-py3-none-any.whl (22 kB) Collecting beautifulsoup4==4.10.0 Downloading beautifulsoup4-4.10.0-py3-none-any.whl (97 kB) Collecting bs4==0.0.1 Downloading bs4-0.0.1.tar.gz (1.1 kB) Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting certifi==2021.10.8 Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB) Collecting cffi==1.15.0 Downloading cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB) Collecting charset-normalizer==2.0.12 Downloading charset_normalizer-2.0.12-py3-none-any.whl (39 kB) Collecting cryptography==36.0.1 Downloading cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl (3.6 MB) Collecting … -
Get choices values from variable text - Django
I have a model with a positivesmallinteger field that has these choices (from model_utils). PERSON_TYPE = Choices( (0, 'women', _('Women')), (1, 'men', _('Men')), (2, 'boys', _('Boys')), (3, 'girls', _('Girls')) ) Elsewhere in my code, I'm trying to read in a person type from a file, but when I go to save to the model, I only have the string version of the person type, not the numerical value I need to store in the db. I know how to use PERSON_TYPE.women to get the numerical value of a person type, but the issue is in my code the person type would be a string variable. It looks like this fileName = companyData.file.name df = pd.read_csv(fileName, delimiter=',', encoding='utf-8-sig') for index, row in df.iterrows(): custPersonType = row[int(form.cleaned_data['columnNames'][0])-1] #gives the person type string I basically want to do PERSON_TYPE.custPersonType, but that doesn't seem to be possible. Is there a way to do this without using a dictionary or a long if/else? -
TypeError: Object of type 'HttpResponseRedirect' is not JSON serializable
I'm trying to run a simple app which receives a payload from an external application and enters EntryLayerView. This view calls a method in utils.py which then redirects the payload to another view for processing. However, I keep seeing this not Json serializable error. Url.py path( "api/v2/myapp/assessments", views.EntryLayerView.as_view(), name="myapp-assessments", ), path( "api/v2/myapp/startconversation", views.startconversation.as_view(), name="myapp-start-assessment", ), Views.py The entry point to the app is the EntryLayerView class EntryLayerView(generics.GenericAPIView): permission_classes = (permissions.IsAuthenticated,) def post(self, request, *args, **kwargs): body = request.data response = get_endpoint(validated_body) #Don't worry about this line return Response(response, status=status.HTTP_200_OK) class startconversation(generics.GenericAPIView): permission_classes = (permissions.AllowAny,) def post(self, request, *args, **kwargs): print("I'm inside the view") redirect = request.GET.get('all the data') #This is the view I'm trying to pass data to utils.py def get_endpoint(payload): qs = '?'+ urlencode(payload) reverse_url = reverse('myapp-start-assessment') url = reverse_url + qs print(url) return HttpResponseRedirect(url) The output of url in utils.py is: /api/v2/myapp/startconversation?contact_uuid=67460e74-02e3-11e8-b443-00163e990bdb&choices=None&value=&cardType=&step=None&optionId=None&path=&title=&description=&message= Error: return json.dumps(*args, **kwargs) File "/usr/local/lib/python3.6/json/__init__.py", line 238, in dumps **kw).encode(obj) File "/usr/local/lib/python3.6/json/encoder.py", line 199, in encode chunks = self.iterencode(o, _one_shot=True) File "/usr/local/lib/python3.6/json/encoder.py", line 257, in iterencode return _iterencode(o, 0) File "/home/osboxes/ndoh-hub/venv/lib/python3.6/site-packages/rest_framework/utils/encoders.py", line 67, in default return super().default(obj) File "/usr/local/lib/python3.6/json/encoder.py", line 180, in default o.__class__.__name__) TypeError: Object of type 'HttpResponseRedirect' is not JSON serializable I'm unable … -
400 error when trying to login via social networks
I use the allauth package. I added allauth.socialaccount.providers.yandex in apps and created a yandex account. There I specified Callback URL: http://127.0.0.1/main/accounts/yandex/login/callback/. I go to http://127.0.0.1/main/accounts/yandex/login/, press Continue and get: 400 redirect_uri does not match the Callback URL defined for the client And no matter how I try to change something, I keep getting this error. What am I doing wrong? -
Assign clients to seller
In my application there are two types of users, sellers and clients. Each client must be assigned to exactly one seller but a seller can have multiple clients. I have created one usermodel, so all my users are saved in the same place. In the model there is a boolean field called "is_seller" and another boolean field called "is_client". These get set to true depending on which registration form the user use. The client must be assigned when they register but I am not able to get my head around how I should implement this logic. I would appreciate all sorts of guidance! -
Django SECURE_HSTS_SECONDS preventing access
I have a Django application deployed on a Linux virtual machine using Nginx as a reverse proxy. The website used to work very well and was accessible by users via HTTPS. However, I have set SECURE_HSTS_SECONDS = 3600 in the settings.py. This blocked access to the website, resulting in a timeout and a status code of 301. I then commented out this line of code. I expected the application to be accessible by users after an hour or so, since the variable SECURE_HSTS_SECONDS was set to 3600 seconds, but it still remains unaccessible. My relevant settings are: if not DEBUG: # Production settings SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True SECURE_SSL_REDIRECT = True # SECURE_HSTS_SECONDS = 3600 # NOTICE that this line was present before but is not commented out SECURE_HSTS_PRELOAD = True SECURE_HSTS_INCLUDE_SUBDOMAINS = True Any idea as to why this might be the case? -
How would one scrape <figure> tags in bs4?
I am trying to scrape images off of https://nytimes.com, however , most of the main headlines' corresponding images on their website is stored inside a <figure> tag, not an <img> tag with a specific src attribute. How would i be able to scrape the urls for the images inside those <figure> tags so i'd then be able to aggregate them on my own website? -
django file opens locally but fails in server
What I wanted to achieve was for a user to upload a file through a form, lets say profile picture, My aim is to take that file, send it through imgbb's api and get the image url to store for use in my template later. I was able to achieve this with the piece of code below, that works locally(Windows) but as soon as I push to my production server(pythonanywhere in this case), the code fails. # CODE: def testingpage(request): image = '' url = '' if request.method == 'POST': pic = request.FILES['image'] url = upload_to_bb(request, pic) if url is not None: from django.contrib import messages messages.info(request, 'Uploaded Successfully') return render(request, 'test.html', {'image': url}) def upload_to_bb(request, pic): import os from django.conf import settings from django.core.files.storage import FileSystemStorage import base64 import requests base_url = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) fs = FileSystemStorage() filename = fs.save(pic.name, pic) file_path = f'{base_url}\media\{filename}' apikey = settings.IMGBB_API_KEY with open(file_path, "rb") as file: url = "https://api.imgbb.com/1/upload" payload = { "key": apikey, "image": base64.b64encode(file.read()), } r = requests.post(url, payload) js = r.json() if r.status_code == 200: data = js['data'] file.close() os.remove(file_path) return data['image']['url'] else: file.close() os.remove(file_path) from django.core.exceptions import ValidationError raise ValidationError("An error occurred processing the image") return None the culprit is … -
Reverse query via foreign key in Django
What query can I use to return all the Organisation objects that are members of a certain membership_id value? e.g. return all Organisation objects that have a membership_id = 101 class Organisations(model) id = models.CharField() class Memberships(model) membership_id = models.IntegerField() organisation_id = models.ForeignKey(Organisations) -
While testing a Django DRF application, how can I make the user in my tests superuser?
I currently have a Django Rest Framework application that executes different logic for superusers than regular users. I've written my tests using both rest_framework.test and pytest-django. My Tests are currently failing because of the error: TypeError: Cannot cast AnonymousUser to int. Are you trying to use it in place of User?. So because I don't have a user set (my app does not allow unauthenticated users), my code is trying to look for a profile of the user making the call and failing. Right now, I'm not looking to test the functionality of User logic. Is there a way to set the default user in test_settings.py to a superuser, or setup a superuser in the def setup(self, request) function at the start of each of my test classes? The DRF docs relating to authentication in testing seem to be geared towards testing the authentication itself as opposed to assuming authentication around other tests. Based on those docs, I think I could hack something together, but there must be a standard way of doing what I'm trying. From what I've read, I can use force_authenticate on a particular user, but it's unclear to me where that user comes from. Do I … -
How to create a table of events which are summarized daily
I have a model for user hours: class Hours(models.Model): project = models.ForeignKey(Project, related_name='project',on_delete=models.DO_NOTHING) owner = models.ForeignKey(User, related_name='owner', on_delete=models.DO_NOTHING, default=1) quantity = models.DecimalField(max_digits=10, decimal_places=2, default=1) product = models.ForeignKey(Product, related_name='product', on_delete=models.DO_NOTHING) inserted_at = models.DateTimeField(default=datetime.now, blank=True) date = models.DateTimeField(default=datetime.now, blank=True) and I want to display the hours in a django template as a table so that the hours are grouped and summed up daily. I understand that I cannot do the math in template, so I need to do it in view, but can you please give me some hints for that? Indrek