Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
Django Rest Framework :How to serialize many to many field
I have my models Certificates and Suppliers and Suppliers has many to many relationship with certificates class Certificates(models.Model): name = models.CharField(max_length=500, null=False) description = models.CharField(max_length=500, null=False) image_url = models.CharField(max_length=500, null=False) def __str__(self): return f'{self.name}' class Suppliers(models.Model): name = models.CharField(max_length=500, null=False) location = models.CharField(max_length=500, null=False) longitude = models.CharField(max_length=500, null=True) latitude = models.CharField(max_length=500, null=True) certificates = models.ManyToManyField(Certificates, null=True) bio = RichTextField(blank=True, null=True) environmental_info = RichTextField(blank=True, null=True) social_info = RichTextField(blank=True, null=True) governance_info = RichTextField(blank=True, null=True) def __str__(self): return f'{self.name}' This is my Serializers: class CertificatesSerializer(serializers.ModelSerializer): class Meta: model = Certificates fields = '__all__' class SuppliersSerializer(serializers.ModelSerializer): certificates = CertificatesSerializer() class Meta: model = Suppliers fields = ('id', 'name', 'certificates') and this is my view @api_view(['GET']) def supplier_response_list(request): suppliers_list = Suppliers.objects.all() serializer = SuppliersSerializer(suppliers_list, many=True) return Response(serializer.data) am getting this error: AttributeError: Got AttributeError when attempting to get a value for field description on serializer CertificatesSerializer. The serializer field might be named incorrectly and not match any attribute or key on the ManyRelatedManager instance. Original exception text was: 'ManyRelatedManager' object has no attribute 'description'. -
Checking message value in Django template
I am working with a Google ReCaptcha on a Django site and would like to check the value of the error messages. If the value is 'Invalid reCAPTCHA. Please try again.' then I would like to show an error message under the ReCaptcha. However, the way that I have this set up is not currently working. <div id="g-recaptcha-error"> {% if messages %} {% for message in messages %} {% if message is 'Invalid reCAPTCHA. Please try again.' %} <span style="color:red;">{{ message }}</span> {% endif %} {% endfor %} {% endif %} </div> How do I check the actual value of the recaptcha message? There could possibly be additional errors so I don't want this to show up if the value is different. When I include this below it shows 'Invalid reCAPTCHA. Please try again. test' So I know the message is correct. {% for message in messages %} <p>{{ message }} test</p> {% endfor %} -
How do I connect django-tinymce with the javascript from TinyMCE?
I have successfully added TinyMCE to my site using the django-tinymce library in the fields in my admin. Looking through a lot of posts on here, there seems to be a utility in adding some javascript, too, but the installation guide does not mention javascript. I have attempted downloading TinyMCE js from the official site and added it in my static/js folder, and then added this to my settings.py: STATIC_URL = '/static/' TINYMCE_JS_URL = os.path.join(STATIC_URL, "js/tinymce/tinymce.min.js") But it did not change anything, so I suspect it does not work. After looking through tons of documentation, posts here and Youtube guides, I have not come to a conclusion. So I have two questions: What is the benefit of adding javascript from TinyMCE to my site - besides the django-tinymce plugin? How do I add it to my site given I already have the django-tinymce installed? EDIT: I actually already know one utility that I want from the js. That is, I want to be able to not include image dimensions in the HTML output of the TinyMCE forms of my admin. Apparently this is edited in the JS - unless the option can be edited elsewhere? -
Django Rest Framework modify field value depending on condition
as a Python, Django and DRF newbie I have a very basic question when building a Rest API for a test project. I am sure the experts here can assist me on this as it is really more than simple (but I run into the wrong direction): Below is the core extract of a very simple API endpoint. When the endpoint is called (GET) I want to return the "Description" value as it is stored in the database (this is clear of course). But if the field "ISO2CODE" has a value (for example "de") I want to change the "Description" value in the API to a different output (e.g. German). Means the API will not return the value in the database but a manipulated value. How should I do this. What is the common way to manage such a (simple) requirement (add a condition - how? in the model definition?). Thank you for any help on this. class Territory(models.Model): ISO2Code = models.CharField(max_length=2) Description = models.CharField(max_length=128) class Meta: ordering = ['pk'] class TerritorySerializer(serializers.ModelSerializer): class Meta: model = Territory fields = ['id', 'ISO2Code','Description'] class TerritoryViewSet(ModelViewSet): queryset = Territory.objects.all() serializer_class = TerritorySerializer def get_serializer_context(self): return {'request': self.request} -
How to handle conflicting basic auth from NGINX reverse proxy with JWT auth from Django?
we have a standard Django web app running behind a reverse proxy. I want to setup a two layer authentification : one from the nginx reverse proxy to shield the application (presently a HTTP Basic authentication -yes we plan to upgrade to something stronger like SSL client certificate or smartcards-), and one at the application level However we are currently running into a issue because the HTTP Basic Authorization header is conflicting with the Django Authorization header The problem arises because the JWT auth from Django requires us to fill the "Authorization" header with the token while NGINX uses another type of authentication. I'm looking for the best way to solve this problem and have the following questions : is it possible to require Django to use an alternative HTTP header to carry its authentication token (instead of "Authorization") or, conversely, is it possible to configure our nginx to use an alternative header for the HTTP Basic authentication (but it seems unlikely as it is done at the browser level) or to require the nginx to do the header translation : i.e. converting back and forth header before pushing them to the Django app. or, even better, can we configure … -
Django CORS Headers works when allowing all, but not for a specified origin
I have a React frontend (hosted at http://localhost:3000/) that is trying to send JWT refresh tokens via HttpOnly Cookies to a Django REST API (hosted at http://localhost:8000/, but tunnelled using ngrok to an https address). I am using django-cors-headers to deal with the cross-origin aspect of this. However, no matter what I do, I cannot seem to get this to work (despite days of research). Any help would be greatly appreciated :D I think I am addressing the endpoint correctly (i.e. https://ngrokapiurl/api/token/refresh/) and I have put 'corsheaders.middleware.CorsMiddleware', at the top of the middleware block. The CORS errors go away when I specify CORS_ORIGIN_ALLOW_ALL = True. However, not only do I understand that security-wise this is not ideal, but it also does not work when I set CORS_ALLOW_CREDENTIALS = True to allow the withCredentials: True part of my axios request to send over the HttpOnly cookie containing the refresh token. Therefore, I remove the CORS_ORIGIN_ALLOW_ALL = True and set CORS_ALLOWED_ORIGINS = [ "http://localhost:3000", ] to specify the allowed origin. However, it is at this point that nothing seems to work. Please help me fix this - I am very new to all of this! The error I get is: error In … -
Django - Count every installment in a balance every month
I made a program to control bills and monthly installments. I don't know if the way I made my Model is wrong, but I achieved to make the month we are now + months to pay. Here's a picture of 2 month installment, I want to appear in 2 months, but only appear in the last (Feb) Now I want in the view to show in balance the installments and its months (i.e: Jan and Feb), but I'm stuck. Can anyone help me, please ? Model.py class Balance(models.Model): account = models.ForeignKey(Account, null=True, on_delete=models.SET_NULL) value = models.FloatField(null=True) installment = models.IntegerField(null=True, default=0) #How many installments installment_value = models.FloatField(null=True, default=0) #Value of it months = models.IntegerField(null=True, default=0) #From a range (1, 12) calculates the last month def save(self, *args, **kwargs): self.months = (int(datetime.now().strftime("%m")) + int(self.installment))-1 if self.months > 12: self.months = int(self.months) - 12 super().save(*args, **kwargs) View.py #BALANCE def balance(request, pk): name = Client.objects.all().get(user=request.user) account = Account.objects.all().get(id=pk) balance = account.balance_set.all() ctx = {'account': account, 'name': name, 'balance': balance, 'months': {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}} #Months dict is for view, it goes in a for … -
Django Images not uploading via S3
I am attempting to upload files to s3 via s3 from this tutorial. I created a group and and user with full s3 privilege's and when i upload an image it stays local instead of being uploaded to bucket. block all public access is false on the bucket boto is installed as well as django-storages added to the apps. Having a hard time figuring out the issue as i don't have any error messages to work with any help would be great! settings.py USE_S3 = os.getenv('USE_S3') == 'TRUE' if USE_S3: # aws settings AWS_ACCESS_KEY_ID = os.getenv('...') AWS_SECRET_ACCESS_KEY = os.getenv('...') AWS_STORAGE_BUCKET_NAME = os.getenv('...') AWS_S3_FILE_OVERWRITE = False AWS_DEFAULT_ACL = 'public-read' AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com' AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'} # s3 static settings AWS_LOCATION = 'static' STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_LOCATION}/' STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' PUBLIC_MEDIA_LOCATION = 'media' MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{PUBLIC_MEDIA_LOCATION}/' DEFAULT_FILE_STORAGE = 'my_app.storage_backends.PublicMediaStorage' else: STATIC_URL = '/staticfiles/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') MEDIA_URL = '/mediafiles/' MEDIA_ROOT = os.path.join(BASE_DIR, 'mediafiles') STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) storage_backends.py from django.conf import settings from storages.backends.s3boto3 import S3Boto3Storage class StaticStorage(S3Boto3Storage): location = 'static' default_acl = 'public-read' class PublicMediaStorage(S3Boto3Storage): location = 'media' default_acl = 'public-read' file_overwrite = False bucket CORS: [ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "POST", "GET", "PUT" ], "AllowedOrigins": [ … -
fetching not with custom primary id in django
I have created a table in which the primary id have to customize id product_id like class Product(models.Model): product_id = models.BigIntegerField(auto_created = True,primary_key = True, unique=True) name = models.CharField(max_length=200) ref = models.CharField(max_length=100) number= models.CharField(max_length=100) class Meta: db_table = "products" def __str__(self): return self.name after creating the record I want to get the id of the latest record but when I retrieve the data with this id getting None product = Product.objects.create(name=name, ref=ref, number=number) print(product.product_id) product.product_id id getting null Pleae give me a solution to why this is happening. -
Can I deploy a django app to heroku from windows 10 operating system
I tried to deploy a django app to heroku from my windows 10. I used gunicorn in the Procfile which gives me error after successful deployment. what can I use in place of gunicorn in the Procfile? -
I have this problem here why I can't runserver
[enter image description here][1] the problem is I cannot do the runserver thing even though the venv and all the stuff are completly fine -
How to manage two applications in django single project [closed]
i have django project in which i have two application User side website Admin panel (backend). Not the admin provided by django. i am unable to manage two application setting.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app', 'app_admin' ] urls.py urlpatterns = [ path('admin/', admin.site.urls), path('', include('app.urls')), path('', include('app_admin.urls')), ] -
Django Serializers - Datetime with multiple possible formats
I want my Django Serializer to validate the format of a date according to several possible formats. Essentially, these formats are: just the date (YYYY-MM-DD) date + hours (YYYY-MM-DD HH) date + hours + minutes (YYYY-MM-DD HH:MM) date + hours + minutes + seconds (YYYY-MM-DD HH:MM:SS) I know that the final two are possible together, using the DateTimeField with format= '%Y-%m-%d %H:%M:%S. I know the first one is possible by default using the DateField. I assume the second one is possible using the DateTimeField with format= '%Y-%m-%d %H', but I haven't tested. What I want to know is: is there a straightforward way to combine all these validators together, without having to use custom functions/validators? For example, my first instinct was to provide a list of possible formats to the format parameter on the Date/DateTime fields, but with no success. Is there something I'm missing? -
How to implement to get percentage task completed by a celery task in djano?
Let I have a celery task task_func() is it possible to write some code so that i can get the percentage of a task completed in django. def task_func(): # some logic ... ... -
Django pass field from serializer to model.save() that is not present in the model
I need to pass fields that are present in serializer, but not present in model to model save method (I have complicated saving logic and I want to make some decisions in object creation based on these fields). How can I do that? I tried to add non_db_field = property to model, but I still get error Reading() got an unexpected keyword argument 'negative_amount' -
Django migrations duplicate/already exists problem
I have a fairly large code base in django, with several applications, and at some point I had a problem: every time I change or add models and try to do a migration, an error appears: django.db.utils.ProgrammingError: relation "appname_modelname" already exists. The problem has been going on for some time - the migration file is always created under the same number - 0114 (I could not find this file, by the way), and all new fixes are recorded in it along with the previous ones, which is why the problem grows, like snowball. I did not want to delve into the solution and just manually removed all the innovations from the database - everything that caused the "already exists" conflict to appear. So, in order for the migration to succeed, I had to manually delete all models or table fields that I created after this problem appeared. But now I'm starting to work in prod with this code and fill it with data, and it is no longer possible to delete all the data from the corresponding tables. I have no idea why this problem appeared and how to solve it and would really appreciate your advice. I tried to … -
DRF Serializer - Accept field but don't use it in `create` or `update`
I have a model Message that has a FileField. My API accepts files in Base64 encoding so they can be sent alongside other data. To know a filename and an extension, there is one more field attachment_filename in the serializer that is not a model field. It is used inside Base64Field. I want to be able to validate if there are both attachment_filename , attachment, or none of them. The problem is that if the attachment_filename is read-only, it is not present in validate - data variable. On the other hand, if it's required=False, allow_null=True, the serializer raises an error when creating a message: TypeError: ChatMessage() got an unexpected keyword argument 'attachment_filename' Code: class Base64File(Base64FileField): # todo make accept a list of extensions (finite eg. pdf, xlsx, csv, txt ) ALLOWED_TYPES = ['pdf', 'xlsx', 'png', 'jpg', 'jpeg', 'docx', 'doc', 'zip'] def get_file_extension(self, filename, decoded_file): extension = self.get_full_name().split('.')[-1] return extension def get_file_name(self, decoded_file): attachment_filename = self.get_full_name() return '.'.join(attachment_filename.split('.')[:-1]) def get_full_name(self): return self.context['request'].data['attachment_filename'] # todo validate name class ChatMessageSerializer(serializers.ModelSerializer): attachment = Base64File(required=False) attachment_filename = serializers.CharField(required=False, allow_null=True) class Meta: model = ChatMessage fields = '__all__' def validate(self, data): """ Validation of start and end date. """ attachment = data.get('attachment') attachment_filename = data.get('attachment_filename') if … -
why in my pycharm IDE template tags intellisense or html tags intellisense do not work?
there is no suggestion for template tags or html tags what should i do ? -
Python | Sum values when data is repeated on other list
So, this is something a little crazy, but I hope it has a solution. I am creating a web application to check sales on a publishing house. Up until now I got everything good: I created a model for products (books), for sales... Everything OK. I am using charts.js to display data. Here is the code for the view: def top_sales_view (request, *args, **kwargs): labels = [] #list for charts.js sold_copies = [] #list for charts.js billed = [] #list for charts.js books_all = Product.objects.all() #get all data from books for book in books_all: book_data=Sale.objects.filter(book = book.id ) #get all sales per book quantity_list = [] #set list of each quantity per sale income_list=[] #set list of each income per sale for data in book_data: quantity = data.quantity income = float(data.final_price) quantity_list.append(quantity) #list all quantity sales per book copies=sum(quantity_list) #sum all quantity sales per book income_list.append(income) #list all income sales per book billing=sum(income_list) #sum all income sales per book book ={ 'id': book.id, 'title':book.title, 'cost_center': book.cost_center, 'data' : { 'copies': copies, 'billing' : billing } } #------------- PARA CHARTS.JS ------------- if book['cost_center'] not in labels: #chech if cost_center is not on the list labels.append(book['cost_center']) #if it isn't, add it if … -
Is there a way to create a django model foreignkey field with variable choices?
Let's say I have three models device, mechanical and digital. In the device model I have a field type. The type field needs to be in a foreign key relationship with either mechanical or digital model which will be determined by the data. Is there any way to create the type field in such a way that the model in which the foreign key relationship is to be done can be chosen manually. Something like: type = models.ForeignKey(to=Choices) where the Choices could be digital and mechanical. I have tried implementing generic foreign keys but my database schema is a bit complex so that would be very difficult to maintain. Is there any other way in django that I can do the above? -
Docker - I have a django application running inside a container on my local machine. I want to connect the app to Postgres DB on my machine
What am I doing: sudo docker build -t my_service:latest . sudo docker run -p 8000:8000 -d sso_service:latest I have added my docker IP range 172.17.0.0/16 to pg_hba.conf I have tried using --network=host with docker run -
Django: Allowing user to click an accept or reject button on each item in a list in Django
I'm working on a website where a list of a varying number of matches with organisations is made for each user. I was wondering if there was a way to display to a user each element in the list with an accept and reject button next to each element so that the user can accept or reject the matches? I found some people recommending pagination but I couldn't get that to work with the list having a variable number of items. Thanks in advance. -
Cors error happening on a simplejwt authenticated webpage
I have used simplejwt in my code and I also have added django-cors-headers to my project to allow frontend development. the problem is that I have 2 APIs that need authentication to allow users to work with them and I can not send a request to these two APIs on the front end and I get the following error: Access to fetch at 'http://localhost:8000/api/user/myapi' from origin 'http://localhost:3000' has been blocked by CORS policy: Request header field x-auth-token is not allowed by Access-Coontrol-Allow-Headers in preflight response Here are the important parts of my settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'rest_framework.authtoken', 'rest_framework_simplejwt', 'corsheaders', ... ] MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddleware', ] ALLOWED_HOSTS=['*'] CORS_ORIGIN_ALLOW_ALL = True REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10, } SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(days=10), 'REFRESH_TOKEN_LIFETIME': timedelta(days=10), 'ROTATE_REFRESH_TOKENS': True, 'BLACKLIST_AFTER_ROTATION': False, 'ALGORITHM': 'HS256', 'SIGNING_KEY': SECRET_KEY, 'VERIFYING_KEY': None, 'AUTH_HEADER_TYPES': ('JWT',), 'USER_ID_FIELD': 'userID', 'USER_ID_CLAIM': 'user_id', 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), 'TOKEN_TYPE_CLAIM': 'token_type', } and here are my views.py and serializers.py # Serializers.py class myAPISerializer(serializers.ModelSerializer): class Meta: model = someModel fields = ('user', 'someField',) read_only_fields = ('user',) def create(self, validated_data): ... #Some changes return super().create(validated_data) # Views.py class PaymentView(generics.CreateAPIView): serializer_class = PaymentSerializer … -
django db with ssh tunnel
Is there a python native way to connect django to a database through an ssh tunnel? I have seen people using ssh port forwarding in the host machine but I would prefer a solution that can be easily containerized. -
NoReverseMatch in Ajax Reorder
I am running into the following issue while implementing an Ajax reorder view into my app. Essentially, my app is just a table that you can filter, reorder, and operate CRUD functions within. When I applied the filter view, the reordering doesn't work anymore. You should be able to update the ranking of each row based on dragging the row up/down ajax: class AjaxReorderView(View): def post(self, *args, **kwargs): if self.request.is_ajax(): data = dict() try: list = json.loads(self.request.body) model = string_to_model(self.kwargs['model']) objects = model.objects.filter(pk__in=list) # list = {k:i+1 for i,k in enumerate(list)} for object in objects: object.rank = list.index(str(object.pk)) + 1 model.objects.bulk_update(objects, ['rank']) # for key, value in enumerate(list): # model.objects.filter(pk=value).update(order=key + 1) message = 'Successful reorder list.' data['is_valid'] = True # except KeyError: # HttpResponseServerError("Malformed data!") except: message = 'Internal error!' data['is_valid'] = False finally: data['message'] = message return JsonResponse(data) else: return JsonResponse({"is_valid": False}, status=400) pick_list: {% extends 'base.html' %} {% load cms_tags %} {% block title %} {{ title }} · {{ block.super }} {% endblock title %} {% block content %} <div style="font-size:24px"> {{ title }} </div> <div style="font-size:14px; margin-bottom:15px"> Click on the arrows on the right of each contestant and drag them up or down to reorder …