Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
Django - Return Two Attributes from a Model
How I return two attributes from a model? Vehicle Model class Vehicle(models.Model): unit = models.CharField(max_length=10, help_text="Unit number for the vehicle") vin = models.CharField(max_length=17, unique=True, validators=[MinLengthValidator(17)], help_text="VIN of the vehicle", primary_key=True) ... def __str__(self): return self.unit Appointment Model class NewAppt(models.Model): ... unit = models.ForeignKey(Vehicle, on_delete=models.SET_NULL, null=True) vin = models.ForeignKey(Vehicle, related_name='VIN', on_delete=models.SET_NULL, null=True) ... def save(self, **kwargs): self.vin = Vehicle.objects.get(unit=self.unit) super().save(**kwargs) Whenever it gets returned, it returns just the unit number in the admin view. If I change self.vin = Vehicle.objects.get(unit=self.unit) to self.vin = self.unit.vin, I get the error: Cannot assign "'1XPTD4EXOCD128815'": "NewAppt.vin" must be a "Vehicle" instance. -
"detail": "Method \"GET\" not allowed." Django rest framework, How to solve it?
I am new to Django restframework I want to register a new student to school but it does not work. I have tried many solutions . what I got is: "detail": "Method "GET" not allowed.". I am not sure if my code in the viewset correct. Can someone help me? In my serializers.py: class StudentSerializer(serializers.Serializer): class Meta: model = Student fields = ['first_name'] class SchoolSerializer(serializers.Serializer): is_existing_student = = serializers.BooleanField() student = StudentSerializer(many=True) class Meta: model = School fields = ['is_existing_student', 'name', 'city', 'street', 'student'] def create(self, **validated_data): student_data = validated_data.pop('student') school_instance = School.objects.create(**validated_data) for student_data in student_data: Student.objects.create(school_instance=school_instance, **student_data) return school_instance In my views.py: class SchoolViewSet(mixins.CreateModelMixin,GenericViewSet): serializer_class = SchoolSerializer queryset = School.objects.all() @action(detail=True, methods=['POST']) def school(self, request, *args, **kwargs): school = self.get_object() if serializer.is_valid(): School.create(school=school, name='name', street='street', city='city', student='student') school.save() else: return Response(status=status.HTTP_204_NO_CONTENT) In my url: router.register(r'register', SchoolViewSet) -
Order by is not working properly in django
order_by is not working when using with filter orders = OrderProduct.objects.filter(status__in=['Delivered', 'Canceled']).order_by('-updated_at') I am expecting output based on the last updated order -
reportlab use for loop to create multiple tables
I need through a for loop to create more tables, I think it works but I need to change the various coordinates, how can I do? 2) Is it possible to change the width of a single row of a table? or in any case bring its text-align to the left but which starts from where the table starts? def testPdfView(request, id): #dati init scheda = get_object_or_404(Schede, pk = id) filename = 'media/pdf/' + scheda.nome_scheda + '.pdf' titolo = scheda.utente.username + ' - ' + scheda.nome_scheda #creazione file doc = SimpleDocTemplate( filename, pagesize = A4, rightMargin = 10*mm, leftMargin = 10*mm, topMargin = 47*mm, bottomMargin = 10*mm ) #titolo doc.title = titolo #passaggio scheda alla funzione pdfCanvas doc.scheda = scheda #table gruppi gruppi = DatiGruppi.objects.filter(gruppi_scheda = id) for gruppo in gruppi: table = Table([ [str(gruppo).upper()] ], colWidths= 180*mm, repeatRows=1) #table style style = TableStyle([ ('TEXTCOLOR', (0,0),(-1,0), colors.HexColor("#9FFC0D")),# -1 significa l'ultimo elemento ('FONTNAME', (0,0), (0,0), 'bulk_bold'), ('FONTSIZE', (0,0), (0,0), 6*mm), ('BOTTOMPADDING', (0,0), (-1,0), 6*mm), ('LINEBELOW',(0,0),(-1,0), 1, colors.HexColor("#9FFC0D")), ]) table.setStyle(style) #table add to template elems = [] elems.append(table) #create doc.build(elems, onFirstPage = pdfCanvas) -
Django: Get value from html for-loop for views.py
I am stuck with getting the value from a for-loop of an html-page. This is my setup: The user has an input field that uses a autocomplete function. This function uses the shop-Model in Django. After submitting, the product will be added to the Shopping_List-Model in Django. It will be displayed in another div of the page. This is currently working without a problem. Every product is in one line of a table including a button to delete the product from the shopping list. The button as such is working. I tried to print out something when the button is clicked. But I am not able to get the value, meaning the product name, from the table row. It always returns none. With the value I would like to delete the product from the shopping list. Any suggestions are much appreciated! Here is my code: HTML <div> <!--Input field and autocomplete--> <form id="product_add" action="{% url 'shop' %}" method="post"> {% csrf_token %} <input type="text" name="shop_product" id="shop_product"> <!--Code for autocomplete--> <script src="https://code.jquery.com/jquery-1.12.4.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> <script> $(function () { $("#shop_product").autocomplete({ source: "{% url 'shop' %}", minLength: 2 }); }); </script> <input type="submit" name="button_add" value="Add"> </form> </div> <div> <table> {% for item in items … -
Change FileField to CharField or change file location to S3
I currently have my files saved in my own server using FileField. And I want to make a migration for saving my files in S3. I was thinking in replace the FileField to a CharField keeping the file names and then, add the domain before it, to keep the track of the files. And then I'd migrate to S3. Is there a simpler way to make this in Django? Is it even possible to change a FileField to a CharField and keep the files path as a string? -
How to send weekly scheduled emails in Django
I like to send scheduled emails for my users every Fridays. I'm using Pythonanywhere so I can't use Celery because PA can work with it. I like to use PA's Task function that can't schedule weekly tasks so it should check every day if it is Friday. I started to write a function but I'm not so experienced and stuck. I don't know how to write the function if it does not have any html where I hit a button to trigger the function. I made a weekly_email_mm.py file in my project directory: import datetime from django.core.mail import send_mail from django.shortcuts import render today = datetime.date.today() weekday = today.weekday() def send_mm_email(???): subject = 'Hello' message = 'Hi there' if (weekday == 4): send_mail( subject, message, 'analytics@mypro.hu', ['ruszak.miklos@gmail.com'], fail_silently=False, ) print('Friday, mails sent') else: print('Not Friday') return render(???) Thank you in advance if you can help me out! -
Based View Class - called success_url method but redirect doesn't seem to work
I am using a based view class to update an article in my app named article. I am implementing it just like how UpdateView works however i can't seem to make it redirect it after validating the form. I called success_url method to redirect into the detail view, but it doesn't work. Am I missing something? I set get_absolute_url in models, #models.py class Article(models.Model): def get_absolute_url(self): return reverse('articles:article-detail', kwargs={"id": self.id}) and in urls #urls.py app_name = 'articles' urlpatterns = [ path('<int:id>/edit/', ArticleUpdateView.as_view(), name='article-edit'), path('<int:id>/', ArticleDetailView.as_view(), name='article-detail'), ] and on views: #views.py class ArticleUpdateView(View): template_name = 'articles/article_edit.html' def get_success_url(self): id = self.kwargs.get('id') return reverse('articles:article-detail', kwargs={'id': id}) def get_object(self): id = self.kwargs.get('id') obj = None if id is not None: obj = get_object_or_404(Article, id=id) return obj def get(self, request, id=None, *args, **kwargs): context = {} obj = self.get_object() if obj is not None: form = ArticleModelForm(instance=obj) context['article'] = obj context['form'] = form return render(request, self.template_name, context) def post(self, request, id=None, *args, **kwargs): context = {} obj = self.get_object() if obj is not None: form = ArticleModelForm(request.POST, instance=obj) if form.is_valid(): form.save() context['article'] = obj context['form'] = form return render(request, self.template_name, context) I tried using it on UpdateView class and redirect seems to work … -
Django Rest - retrive data from nested class
In my following output (below), I would like to get the value from rating field. As you can see there are two rates for that car model. The value from rating will be needed to calculate average rate for that model. { "id": 4, "make": "Citroen", "model": "C4", "rates": [ { "id": 6, "rating": 4, "car_id": 4 }, { "id": 7, "rating": 4, "car_id": 4 } ], "avg_rating": 0.0 } Here is my models.py: class Car(models.Model): make = models.CharField(max_length=15) model = models.CharField(max_length=15) avg_rating = models.FloatField(default=0) def __str__(self): # print it when Car instance is needed return self.make class CarRate(models.Model): car_id = models.ForeignKey(Car, related_name='rates', on_delete=models.CASCADE, default=0) rating = models.PositiveIntegerField(default=0) -
How to POST whole html table data using Django?
Created a html table with three columns and 26 rows which is mapped to the Django views.py file. Was trying to post all html table data into DB using Django views.py file. Please find my views.py: def create(request): form = Scrum.objects.all() if request.method == "POST" or "None": form.save() context = { 'form': DBData } return render(request, "scrum.html", context) scrum.html <form method="POST" action="."> {% csrf_token %} <table class="example-table multiselectable is-centered" id="table" contenteditable="true"> <tbody><tr><td class="selected">1</td><td class="selected">2</td><td>3</td><td>4</td><td>5</td></tr> <tr><td class="selected">1</td><td class="selected">2</td><td>3</td><td>4</td><td>5</td></tr> <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr> <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr> <tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr> </tbody></table> <input type="submit" name="submit" class="btn btn-outline-primary btn-block" placeholder="Submit"> </form> After clicking "Submit" button, all my provided data in table should be saved in DB. My model will be shown as below: models.py Category = models.CharField(max_length=30) TaskName = models.CharField(max_length=70) AssignedTo = models.TextField(max_length=70) -
Any risk in upgrading postgres 9.6 to 12.7?
I have a project built in python/Django which uses Postgresql==9.6. Now that this version of Postgres is no longer supported, I am upgrading it to version 12.7. Writing this question to know if anybody faced any challenges while doing this upgrade. My project has a lot of direct SQL statements along with the ORM(Django's default ORM) queries and I am pretty worried about these. It would be great if someone can also list all the functions/features which are part of 9.x and deprecated in 12.x. My project is built on: python == 3.6 django == 1.11 postgresql == 9.6.22 (current), upgrading to postgres == 12.7 [fyi - Using AWS RDS] psycopg2 == 2.6.2 Thanks for any help:) -
What is the order of execution of the return statements for saving the form data?
def issuebook_view(request): form=forms.IssuedBookForm() if request.method=='POST': #now this form have data from html form=forms.IssuedBookForm(request.POST) if form.is_valid(): obj=models.IssuedBook() obj.enrollment=request.POST.get('enrollment2') obj.isbn=request.POST.get('isbn2') bk = models.Book.objects.get(isbn = obj.isbn) if bk.available_copies == 0: return render(request,'library/booksover.html') if bk.available_copies > 0: bk.available_copies = bk.available_copies - 1 bk.save() obj.save() return render(request,'library/bookissued.html') return render(request,'library/issuebook.html',{'form':form}) I am new to Django and finding it difficult to understand the order of execution of the return statements in the above function to save the form data. Can anyone explain the order of execution of the execution of the return statements.As per my understanding i think first the last return render statement with the form template is run and then the execution shifts back upwards and processes the rest of code from form.is_valid. Please help me with this. Thanks in advance. -
ClientError HeadObject when collecstatic AWS S3
I have a VPS and I'm trying to collectstatic (Django) using AWS S3. When I try to python manage.py collectstatic I got this error: botocore.exceptions.ClientError: An error occurred (400) when calling the HeadObject operation: Bad Request More context I have another VPS with same project and works. I tested with same aws credentials (user and bucket) and I get the same error. Testing localy works. -
I want to insert data into MySQL database with Django
I am doing web scraping and I want to store the information in the database. I have the connection with the database in the 'settings' file like this: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbname', 'USER': 'root', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': 'port' } } The web scraping I have it in another file like this: from bs4 import BeautifulSoup import requests url = "https://www.somepage.com" result = requests.get(url) soup = BeautifulSoup(result.text, "html.parser") find_by_class = soup.find('div', attrs={"class":"body"}).find_all('p') I want to store what is in find_by_class in the database. Also I have created the models. from django.db import models class SomeModel(models.Model): description = models.TextField(max_length=1000) -
Trying to write a crispy form factory
I'm trying to write a form factory to return Crispy forms with an appropriate helper object attached. This is what I have. It seems to work, but also seems inelegant. def crispy_form_factory( schema): namespace = { '_schema': schema } for key, info in schema: # details omitted. I know this works because I've been using it without crispy. # it populates the namespace with things like namespace[key] = forms.Charfield( **kwargs) ## where kwargs is generated based on info from the schema dict form_class = type('Schema_Form', (forms.Form,), namespace ) class Crispier( form_class): def __init__( self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper=FormHelper(self) # Crispify self.helper.layout = make_layout( self._schema) return Crispier What I was hoping to do was define an inner function def init(self, *args, **kwargs): super().__init__( *args, *kwargs) self.helper = FormHelper( self) self.helper.layout = make_layout( self._schema) namespace['__init__'] = init return type('Crispy_PRSBlock_Form', (forms.Form,), namespace ) but 'magic' super() doesn't work when used this way. What's the elegant way to inject a Crispy layout object into a form factory function? (The answer may lie in Python metaclasses, which I confess to not reallty understanding) Elegance aside, is there any particular reason why not to do it the way I have found which appears to be … -
Django modelSerializer form.is_valid() is true when values are empty
When I run form.is_valid() it returns true except for branches_count and employee_count. When I run form.save() it returns key errors serializers.py class GeneralInformationFormSerializer(serializers.ModelSerializer): class Meta: model = Business fields = ['location', 'date_founded', 'employee_count', 'branches_count', 'business_premises'] def update(self, instance, validated_data): return update_business_details(instance, validated_data) This is models.py class Business(SyncedBusinessModel): location = models.TextField(blank=True) employee_count = models.IntegerField(blank=True, null=True) branches_count = models.IntegerField(blank=True, null=True) business_premises = models.CharField(max_length=255, blank=True, choices=BUSINESS_PREMISES_CHOICES) date_founded = models.DateField(blank=True, null=True) def __str__(self): return self.name class Meta: verbose_name_plural = "businesses" -
How to get the value of html radio button
In my html, I have the code below ... <div class="tab-pane fade" id="account-notifications"> <div class="card-body pb-2"> <h6 class="mb-4">Activity</h6> <div class="form-group"> <label class="switcher"> <input type="checkbox" class="switcher-input" checked> <span class="switcher-indicator"> <span class="switcher-yes"></span> <span class="switcher-no"></span> </span> <span class="switcher-label">Email me when someone comments on my article</span> </label> </div> <div class="form-group"> <label class="switcher"> <input type="checkbox" class="switcher-input"> <span class="switcher-indicator"> <span class="switcher-yes"></span> <span class="switcher-no"></span> </span> <span class="switcher-label">Email me when someone answers on my forum thread</span> </label> </div> </div> </div> ... There are two input fields, one is checked and the other one isn't. The user can also toggle On or Off the switch. My problem how to get the current state of the switch (toggled On or Off) so that I can send the value to my Django as True or False -
How to set an environment variable inside a Django management command (python script)
I am trying to make a Django management command that cache's a user's SUDO password, and the SSH deploy key password, so the second time they run the script it does not ask for them. However the root cause of the problem is that the Environment variables set within the child shell, do not persist to the parent shell when the child shell exits, as explained here: Is it possible to change the Environment of a parent process in Python? I don't wish to write this sensitive information to a file. So how does one pass info from the management command, back to shell, so next time the command is run it can access the cached credentials? when the shell is quit, it must destroy the cached info. Here's my code if anyone is interested: import os from subprocess import run, PIPE, Popen from getpass import getpass from django.core.management.base import BaseCommand SUDO_ENV_KEY = 'SUDO_PASSWORD' GIT_ENV_KEY = 'GIT_PASSWORD' class Command(BaseCommand): def handle(self, **options): # ----GET SUDO AUTH---- if not (sudo_pass := os.environ.get(SUDO_ENV_KEY)): sudo_pass = getpass(f"Please enter sudo password: ") os.environ[SUDO_ENV_KEY] = sudo_pass # Send password via STDIN as bash history is insecure command = ['echo', 'Getting sudo...'] p = Popen(['sudo', '-S'] … -
Field 'maca' expected a number but got ''
models.py class Boss(models.Model): class Maca(models.IntegerChoices): one_maca = 1, one_macas = 2, two_maca = 3, four_maca = 4, six_maca = 5, __empty__ = _('Select') maca = models.IntegerField( db_column='Maca', choices=Maca.choices, blank=True, null=True ) forms.py maca = forms.ChoiceField(required=False, choices=Boss.Maca.choices, widget=forms.Select) When I try to submit as empty value I got the following error ValueError: Field 'maca' expected a number but got ''. -
Django global variable disadvantages
What disadvantages are there when using django and defining variables like this then using them in the views??? logged_user = Logged_User.objects.all() def logged_user(request): a = B.objects.filter(a = request.user) return render(request, 'a.html',{'a':a,**'logged_user':logged_user**}) Rather than def logged_user(request): a = B.objects.filter(a = request.user) logged_user = Logged_User.objects.all() return render(request, 'a.html',{'a':a,**'logged_user':logged_user**}) With the first step, the logged_user is callable from any other view without having to rewrite everything. -
How to change python code formatting so that a single statement fits in one line, rather than being formatted into multiple?
I need to fetch all the Django ORM queries used in my project. I have written a script that goes through the project files and writes the matching LOC to a CSV. The problem is that some of these queries are written in multiple lines to improve readability, which is causing my logic to fail and give me incomplete results in the CSV. Does anyone have an idea how to remove the code formatting to make a single python statement fit in one line so that I can execute my script successfully? -
Django Separate Settings raises error TemplateDoesNotExist at /
I have been attempting to separate my settings via settings folder with base, dev prod and init files and ran the server with the dev settings it says it runs with no issues but when I click on the link I now get an error TemplateDoesNotExist at /, I was able to access the page before seperating my settings I decided to try the above on a fresh django project which appears to have worked on out of the box django main page and admin panel however again when I go to add a new url and view and template the same error is raised TemplateDoesNotExist at /. Please see the following code exlcuding settings/base.py as this is just fresh project settings but cut SECRET_KEY and placed in settings/dev.py which worked prior to adding url/view and template: urls from django.contrib import admin from django.urls import path, include, reverse_lazy from django.contrib.auth import views as auth_views from . import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.home, name="home"), ] views from django.shortcuts import render, redirect def home(request): return render(request, 'test.html') template - projectroot/templates/test.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Test</title> </head> <h1>Test</h1> <body> </body> </html> Help is much apprecaited in getting … -
Passing context from get_conext_data to get
I use to have book_a_room_form = BookARoomForm() in get_context_data but then I amended it to book_a_room_form = BookARoomForm(initial={'arrival_date': request.session['arrival_date']}) and put it in get (see reason for moving it to get here). get_context_data and get work individually. But I cannot get them to work together. I have read dozens of posts on the issue, looked at my traceback and been given a variety of different error messages. I am now just going round cirlces with the issue. def get_context_data(self, *args, **kwargs): context = super(HotelDetailSlugView, self).get_context_data(*args, **kwargs) cart_obj, new_obj = Cart.objects.new_or_get(self.request) context['hotel_extra_photos'] = AmericanHotelPhoto.objects.all().filter(title=AmericanHotel.objects.all().filter(slug=self.kwargs.get('slug'))[0].id) context['room_type'] = RoomType.objects.all().filter(title=AmericanHotel.objects.all().filter(slug=self.kwargs.get('slug'))[0].id) return context def get(self, request, *args, **kwargs): # This code is executed each time a GET request is coming on this view # It's is the best place where a form can be instantiate book_a_room_form = BookARoomForm(initial={'arrival_date': request.session['arrival_date']}) return render(request, self.template_name, {'book_a_room_form': book_a_room_form, }) -
How to Django ORM queryset on different language database while input query set language as English?
I have one database where all data are stored in english . But if i want to appy queryset filter on that database i Need to queryset language as french. But what if i want to filter database as queryset language as English. My problem is like this where i have one country_name field in my Country model. Problem is stored country data is in french language . I want to apply filter query on that but i have English country name as query and not french i am getting query result empty. ex : in Croatie in french but Croatia in English. Now if i query on country_name field i not get any result because it's not exact match. can we have any solution for problem like that where we can query on different language database while query input language as English. -
wkhtmltopdf is not rendering images to pdf
this is my image tag in django templates <img src="{{post.image.url}}" /> my url.py path( 'pdf/<int:pk>/', MyPDF.as_view(template_name='templates/post_detail.html', filename='post_pdf.pdf'), name='pdf-wk' ), this is my view.py class MyPDF(PDFTemplateView): template_name = 'templates/post_detail.html' def get_context_data(self, pk): context = {'post': Post.objects.get(pk=pk)} return context