Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
How to use a ManyToMany field in django with a through model, displaying it and saving it?
I am doing a basic system in Django for a Spa that requires me to have an inventory, massages that use different quantities of product in the inventory, and then a service which will be a combination of multiple massages. So the user of the spa, which is the staff, will be able to create a service, select which massages make that service, and that will instantly trigger the subtraction of that product from the inventory. I used a many to many relation to relate the massages and the items, with a through model to save the amount used as well. My question is, what would be the best way to display this in a form so the staff can add new massages in a way where they can choose many items and their respective quantity that the massage will use? And how can i save all of this afterwards into the DB? I'm using PostgreSQL. This is how my models look right now: class Producto(models.Model): nombre = models.CharField(max_length=200, blank=False) línea = models.CharField(max_length=200, blank=False) proveedor = models.CharField(max_length=200, blank=False) costo_mxn = models.DecimalField(blank=False, max_digits=10, decimal_places=2) unidad_de_medición_choices = [ ("g", "g"), ("mL", "mL"), ("oz", "oz"), ] unidad_de_medición = models.CharField(max_length=20, choices=unidad_de_medición_choices,null=True, blank=True) cantidad_actual = … -
Count objects under some condition using Django templates
I would like to count items under a certain condition. For example (invented view): ... context['example'] = test return render(request, 'index.html', context) .... example has the following values: col1 col2 12 34 99 42 99 42 I know how to count all the values within example, I could so something like this: {{ example.count }} and that would return 3 My question is: how can I count all the items under a certain condition? For example, is there any built-in option to do something like count where example.col2==42 and the result should be 2 -
How to send variables from one views to another?
in my html template I have a variable {{ student.mail}} from context in view Nr.1. In this template I also have button <a class="btn btn-warning" href="{% url 'send_and_home' mail=student.mail %}" role="button">Save and Send</a>. How to send this student.mail to the view Nr.2. The first view returns home page without any . My second page also returns the same home page, but also inside have an additional function to send mail. I don't understand how to implement something like this? Could you help me? my urls: path('home/', views.home, name="home"), my 1st view: @login_required(login_url='login') def home(request): # smth context = ... return render(request, 'app/home.html', context) my 2nd view: @login_required(login_url='login') def send_and_home(request, mail): # article, text, to for mail() depends on mail var from my template mail() context = the same as a view Nr.1 return render(request, 'app/home.html', context) def mail(request, article, text, to): return send_mail( article, 'text', '........', [to,], fail_silently=False, ) -
Join django unrelated models
I have 3 models and I'd like to join them and query in just one query. However, 2 of them do not have foreign keys to each other so I can't use the select_related() option. Could I please request your help? Thanks Here is the model schema: class UserGroup(models.Model): group_name = models.CharField(max_length=80) user_id = models.CharField(max_length=20) class StrategyUserGroupRel(models.Model): strategy = models.ForeignKey(Strategy, on_delete=models.PROTECT) user_group = models.ForeignKey(UserGroup, on_delete=models.PROTECT, to_field='group_name') class SignalStrategyRel(models.Model): signal = models.ForeignKey(Signal, on_delete=PROTECT) strategy = models.ForeignKey(Strategy, on_delete=PROTECT) My entry point would be "user_id" First, I want to get all "group_name" linked to that "user_id". Then, I want the "strategy" which the "group_name" is linked to (can be multiple strategies) Finally, I want the "signal" which the "strategy" is linked to (can be multiple signals) In SQL, it would be like this: select * from strategy_user_group_rel sugr inner join user_group ug on sugr.user_group = ug.group_name inner join signal_strategy_rel ssr on ssr.strategy_id = sugr.strategy_id where ug.user_id = "test_user" -
i want to directly input in django admin dropdown box
This situation is like as above pic. i want to direct input in dropdown i mean, I want to make it possible to input directly, including choosing a dropdown. enter image description here # models.py class AccountBook(TimeStampedModel): branch = models.ForeignKey(Branch, on_delete=models.CASCADE, null=False) accountclassification = models.ForeignKey(AccountClassification, on_delete=models.CASCADE, null=True) accountcategory = ChainedForeignKey( "AccountCategory", chained_field="accountclassification", chained_model_field="accountclassification", show_all=False, auto_choose=True, null=True ) ... # admin.py @admin.register(AccountBook) class AccountBookAdmin(admin.ModelAdmin): list_display = ( "accountclassification", "accountcategory", "account_amount", "account_reference", "account_manager", "account_recoder" ) date_hierarchy = 'created_time' class Media: js = ( 'smart-selects/admin/js/chainedfk.js', 'smart-selects/admin/js/chainedm2m.js', ) -
dj-rest-auth - Disable sign up with social account but allow login
what I want to do is have users register using a standard registration page and then have them link their facebook account once in the application which will then allow them to sign in using the "Sign in with facebook" button. So if the users doesn't have an account the Sign in button shouldn't work. however at the moment if a user clicks the FB sign in button A blank account gets created. is there a way to only allow social sign in and not registration ? I've tried setting SOCIALACCOUNT_AUTO_SIGNUP = False but it doesn't seem to work -
Memory issues when sending many files in a row using Requests
In my local folder, I have around 100 css, js and svg files that I'm trying to send via REST api to a Django application. File sizes range from 50KB to 2MB. I'm using requests the following way to send the files one by one, in a loop. requests.post(url, files={"file": open('app.js', 'rb')} Some files get sent and others don't. Every time I re-try, some files that got sent the first time fail, and some that failed the first time succeed. Which file fails and which succeeds is totally random. Logs show a very strange behavior. It seems that the contents of the file that I'm sending, end up in request line and header, not request body where they should be. [2022-02-22 16:32:04 -0600] [8] [DEBUG] Invalid request from ip=172.31.0.1: Invalid HTTP request line: 'ghtSidebarTheme();' [2022-02-22 16:13:31 -0600] [8] [DEBUG] Invalid request from ip=172.31.0.1: Invalid HTTP request line: 'ivateDarkSidebarTheme();' [2022-02-22 10:46:25 -0600] [8] [DEBUG] Invalid request from ip=172.31.0.1: Invalid HTTP method: 'isabled,' Pay attention to the first log statement: Invalid HTTP request line: 'ghtSidebarTheme();' ghtSidebarTheme(); is simply truncated from rightSidebarTheme(); which is a function in one of the js files. My intuition is that there are some memory issues but I'm … -
How can you assign multiple string values to an attribute in Django models
class Customer(models.Model): user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE, related_name="Customer", limit_choices_to={'is_staff': False}) employee = models.ForeignKey( Employee, null=True, blank=True, on_delete=models.SET_NULL) # locations = What should go here? business_name = models.CharField(max_length=200, null=True, blank=True) phone_no = models.CharField(max_length=200, null=True, blank=True) address = models.CharField(max_length=500, null=True, blank=True) website_url = models.URLField(null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) As you can see here, I have a locations field which. This field is to store at most 5 locations the business is located in. How can I best achieve this? I have read about using a Many2Many field but this would not be desirable as the locations would have to be first created in the Admin and then added to the business. -
Using django-auditlog, how can I display the 'actor_id' for a particular model?
I have created a simple Django application to display individual articles. These articles have a number of fields that users can edit. I am using the package 'django-auditlog' to log changes to these article models. So far, I have simply followed the auditlog installation doc to setup model history tracking (as well as enabling the middleware to allow 'actor_id' to be tracked). I have also added the example code that displays the most recent changes on the individual model pages as such: <!-- History display --> <div class="table-responsive"> <table id="history" class="table table-striped table-bordered"> <thead> <tr> <th>Actor</th> <th>Field</th> <th>From</th> <th>To</th> </tr> </thead> <tbody> <!-- Human readable - change to '.changes_dict.' for proper logs --> {% for key, value in article.history.latest.changes_display_dict.items %} <tr> <td>{{ article.history.latest.author_id }}</td> <td>{{ key }}</td> <td>{{ value.0|default:"None"|striptags|safe }}</td> <td>{{ value.1|default:"None"|striptags|safe }}</td> </tr> {% empty %} <p>No history for this item has been logged yet.</p> {% endfor %} </tbody> </table> </div> As my code may suggest, I am trying to add an additional column to the history table to show who made the changes that are being displayed. Is there an easy way to do this through auditlog, or will I have to create some kind of sql query … -
How does django's `python manage.py shell` keep the command prompt open?
When you run python manage.py shell, (or shell_plus if you have the extension), the script will import some stuff for you and then open a regular python shell for you to try commands out, as opposed to running the script and immediately closing. I know that you can use the -i switch when calling a script to keep the command prompt open, for example python -i foo.py will run the contents of foo.py yet keep the shell open instead of immediately closing. I would guess that when you call django's manage.py shell it somehow uses the same feature to get the command prompt to stay open and not immediately close out. How does it work? Can I add something to any script file to make it behave the same way (without using the -i switch) ? -
Trying to implement Auth0 Authentication with React front-end and Django backend
For my project I am using React for my frontend and Django for my backend and connected using django rest framework. I am trying to set this up so that when a user is created in auth0 it updates my users table in django. Would greatly appreciate some general assistance or resources on accomplishing this. Thanks -
Django TemplateDoesNotExist at '/' with outside app
Lately i've been trying to connect my django application that serves as an API to a react app that will work as the frontend (the react app was made with vite by the way). The issue that i'm having is that, no matter what i change in the index.html (frontend), urls.py or settings.py (backend) i always get the same error: TemplateDoesNotExist at /. This would be my folder hierarchy, considering the react folder and django folder are at the same level (don't mind the name of the folders inside de hierarchy, i need to change them). React (front end): This is the index.html code: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <link rel="icon" type="image/svg+xml" href="https://va.exeiot.com/static/assets/media/logos/favicon.png" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <!--Fuenes Material UI--> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" /> <!--Fuentes EXEIOT--> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700"> <title>Video Analitica</title> <!--Linea de refereencia para que el navegador pueda encontrar index.algo.js--> <base href="/dist/"> <!--Fin referencia--> </head> <body> <div id="root"></div> <script type="module" src="/src/main.jsx"></script> </body> </html> Django (backed, API): In the Django directory the folder "backend" contains the settings of the django project and the folder "frontend" contains the api, views and models. This are the contents of: settings.py import os from pathlib import Path import environ … -
Why am I unable to add data to django Model's objects
So this is a bit weird. I make a post request from the website I'm working on, I get the data on the backend but I can't access the model's field with the received data. My Models.py: class Records(models.Model): user = models.ForeignKey(Teacher, null=True, on_delete= models.SET_NULL) Year = models.CharField(max_length=100, null=True) January = models.CharField(max_length=100, null=True) Feburary = models.CharField(max_length=100, null=True) March = models.CharField(max_length=100, null=True) April = models.CharField(max_length=100, null=True) May = models.CharField(max_length=100, null=True) June = models.CharField(max_length=100, null=True) July = models.CharField(max_length=100, null=True) August = models.CharField(max_length=100, null=True) September = models.CharField(max_length=100, null=True) October = models.CharField(max_length=100, null=True) November = models.CharField(max_length=100, null=True) December = models.CharField(max_length=100, null=True) My Views.py: @api_view(['POST']) def Attendance(request): data = request.data['list'] print (data) user = Teacher.objects.get(name=data[0].split('-')[0]) record = Records.objects.get(user=user, Year=data[0].split('-')[1]) month = data[1] print(month) # output is January return JsonResponse({'success':True}) So now when I try to print the January field of the records model, I do it like print(record.January) The issue I'm facing is that I can't do record.month even tho month represents January I want to add the data I got from the post request to the Model Field, normally what I do is: record = Records.objects.get(user=user) record.January = "50" record.save() but as mentioned before record.month isn't working, rather I get this error: AttributeError: 'Records' … -
How To Write QuerySet in Django TemplateView
class CatalogueView(TemplateView): """ Browse all products in the catalogue """ context_object_name = "products" template_name = 'oscar/catalogue/browse.html' model = Product def get(self, request, *args, **kwargs): try: self.search_handler = self.get_search_handler( self.request.GET, request.get_full_path(), []) response = super().get(request, *args, **kwargs) except InvalidPage: # Redirect to page one. messages.error(request, _('The given page number was invalid.')) return redirect('catalogue:index') return response def get_search_handler(self, *args, **kwargs): return get_product_search_handler_class()(*args, **kwargs) def get_context_data(self, **kwargs): context = super(CatalogueView, self).get_context_data(**kwargs) ctx = {} ctx['summary'] = _("All products") ctx['pro_list'] = Product.objects.all() ctx['pro_list'] = Product.objects.all().filter().order_by('upc') search_context = self.search_handler.get_search_context_data( self.context_object_name) ctx.update(search_context) return ctx Don't mind the messy Code indentation format. Django Oscar uses the class based TemplateViews and I want to write more queresets for my products model but everything seems not working. get_context_data will not work. I need a way to add more Queresets to the TemplateView in the catalogue view. How can this be resolved? I need to filter more queresets for the Product -
Run Linux shell or command in Python Django and present in dasboard
Good, I intend to run a command on Linux server using python django and show it on a screen on the web. Ex: ps auxf | grep java Present on screen in Python Django ` -
Using dj-rest-auth to authenticate multiple user types
I'm building a rest API using dj-rest-auth. I have multiple user types that inherit from a custom user model. I have integrated dj-rest-auth that works using the base user model. However, I need to use dj-rest-auth on the user types. How would I go about this? Also, I would like a user to be able to belong to multiple user types. -
OpenGraph show full image size in preview
I want to show a thumbnail when sending a link. I tried it with using open graph and now it looks like that: but I want it to look like this: how can I change the size of the image in the preview. This is my code right now: <meta property="og:image" content="/media/{{ image }}"> {{ image }} is just my templatetag for the image but that works like expected so there is no need to change something there. If it's necessary I'm also able to change the service from opengraph to some other if changing the size is not possible there. -
Upgrade to Django 4.0 has caused tests to fail even when the feature being tested works
A bit of an odd one. I've upgraded from Django 3.2 to 4.0. A lot of my tests fail and they all fail where I'm testing the result of a form submission. However the forms themselves work fine when I test them using my browser. And all the tests fail in exactly the same way with the message AssertionError: The form 'form' in context 166 does not contain the field 'date' (obviously the field, form name and number are different in each test). I've looked though the Django documents to see if the way forms should be tested has changed but I don't see any mention of anything that could have caused this. Sample test: def test_expenses_new_and_edit_ye(self): """ Submits expense before and after ye date, then again with edit """ self.client.force_login(User.objects.get_or_create(username='testuser')[0]) # Redate the most recent YE to 10 days ago ye = JournalEntry.objects.filter(type='YE').order_by('-id')[0] ye.date = (datetime.today() - relativedelta(days=10)) ye.save() # Try to submit into previous financial year date = (datetime.today() - relativedelta(days=10)).strftime('%Y-%m-%d') response = self.client.post(reverse('journal:expenses_new'), {'date':date, 'account': 20, 'expense': 7, 'project': 1, 'store': 'Test store 223', 'amount': 10}) self.assertFormError(response, 'form', 'date', 'Date must be within current financial year') Sample output: ====================================================================== FAIL: test_expenses_new_and_edit_ye (journal.tests.test_main.ExpensesChecks) Submits expense before and after … -
Django Alternative To Inner Join When Annotating
I'm having some trouble generating an annotation for the following models: class ResultCode(GenericSteamDataModel): id = models.IntegerField(db_column='PID') result_code = models.IntegerField(db_column='resultcode', primary_key=True) campaign = models.OneToOneField(SteamCampaign, db_column='campagnePID', on_delete=models.CASCADE) sale = models.BooleanField(db_column='ishit') factor = models.DecimalField(db_column='factor', max_digits=5, decimal_places=2) class Meta: managed = False constraints = [ models.UniqueConstraint(fields=['result_code', 'campaign'], name='result_code per campaign unique') ] class CallStatistics(GenericShardedDataModel, GenericSteamDataModel): objects = CallStatisticsManager() project = models.OneToOneField(SteamProject, primary_key=True, db_column='projectpid', on_delete=models.CASCADE) result_code = models.ForeignKey(ResultCode, db_column='resultcode', on_delete=models.CASCADE) class Meta: managed = False The goal is to find the sum of factors based on the result_code field in the ResultCode and CallStatistics model, when sale=True. Note that: Result codes are not unique by themselves (described in model). A Project has a relation to a Campaign The following annotation generates the result that is desired (possible solution): result = CallStatistics.objects.all().values('project').annotate( sales_factored=models.Sum( models.Case( models.When( models.Q(sale=True) & models.Q(project__campaign=models.F('result_code__campaign')), then=models.F('result_code__factor') ) ) ) ) The problem is that the generated query performs a Inner Join on result_code between the 2 models. Trying to add another field in the same annotation (that should not be joined with Resultcode), for example: sales=models.Sum(Cast('sale', models.IntegerField())), results in a wrong summation. The Questions is if there is an alternative to the automatic Inner Join that Django generates. So that it is possible … -
Field 'id' expected a number but got <QueryDict: {'csrfmiddlewaretoken':
I'm having this error and I can't solve the problem VIEW.PY def projects_add(request, client_id): if request.method == 'POST': form = ProjectForm(request.POST or None) if form.is_valid(): instance = form.save(commit=False) client = Clients.objects.get(pk=client_id) instance.client = client instance.created_date = datetime.date.today() instance.status = 'Análise' instance.save() messages.success(request,'Projeto adicionado') else: messages.error(request,'Ocorreu um erro!') return HttpResponseRedirect(reverse('projects')) else: form = ProjectForm(client_id) all_projects = Project.objects.all() return render(request,'projects.html',{'form':form, 'all_projects':all_projects}) FORMS.PY class ProjectForm(ModelForm): class Meta: model = Project fields = ['owner','farm','warranty','modal','culture','value','final_date'] def __init__(self, client_id, *args,**kwargs): super(ProjectForm, self).__init__(*args,**kwargs) self.fields['value'].required = False self.fields['final_date'].required = False self.fields['farm'].queryset = Farm.objects.filter(client=client_id) self.fields['warranty'].queryset = Farm.objects.filter(client=client_id) for field_name, field in self.fields.items(): field.widget.attrs['class'] = 'form-control' MODELS.PY class Project(models.Model): modal_types = [('CUSTEIO AGRÍCOLA','Custeio Agrícola'),('CUSTEIO PECUÁRIO','Custeio Pecuário'),('INVESTIMENTO AGRÍCOLA','Investimento Agrícola'),('INVESTIMENTO PECUÁRIO','Investimento Pecuário'),('FGPP','FGPP')] farm = models.ManyToManyField(Farm, related_name='project_farm',verbose_name='Propriedade beneficiada') client = models.ForeignKey(Clients, on_delete=models.CASCADE, related_name='project_client',default=None,null=True, verbose_name='Cliente') owner = models.ForeignKey(Owner, on_delete=models.CASCADE, related_name='project_bidder',default=None,null=True, verbose_name='Proponente') warranty = models.ManyToManyField(Farm, related_name='project_warranty',default=None, verbose_name='Propriedade de garantia') modal = models.CharField(max_length=100,default=None,choices=modal_types, null=True, verbose_name='Tipo') culture = models.CharField(max_length=50,null=True, verbose_name='Cultura') status = models.CharField(max_length=50,null=True, verbose_name='Status') created_date = models.DateField(null=True, verbose_name='Data de criação') value = models.FloatField(max_length=10,null=True, verbose_name='Valor financiado') final_date = models.DateField(default=None,null=True, verbose_name='Fim do contrato') I think the problem occurs because of the way I use to define queryset, but I've tried everything and it doesn't work. -
Model form create within listview in Django using CBV
Hi i m learning django by creating weather app. I dont know this is the correct way of doing this.I need a form within listview for adding city to user and I'm using CBV .but form is not present in website.what can I do? views.py from urllib import request from django.shortcuts import render import requests from datetime import datetime from .models import City from pytz import timezone from django.views.generic import ListView from .forms import CityForm from django.views.generic.edit import FormMixin, FormView class Cities(FormMixin,ListView): model=City template_name='home.html' form_class=CityForm success_url='/' def get_context_data(self, *, object_list=None, **kwargs): context =super(Cities, self).get_context_data(**kwargs) weather_data=[] for city in City.objects.all(): url=f'https://api.openweathermap.org/data/2.5/weather?q={city}' data=requests.get(url).json() if data["cod"] != "404": now_asia =datetime.fromtimestamp(data['timezone']).strftime('%a,%b %d %Y') payload={ 'city':data['name'], 'weather':data['weather'][0]['main'], 'icon':data['weather'][0]['icon'], 'fahrenheit':data['main']['temp'], 'celsius':int(data['main']['temp']-273), 'pressure':data['main']['pressure'], 'humidity':data['main']['humidity'], 'description':data['weather'][0]['description'], 'date' :now_asia, } weather_data.append(payload) else: weather_data={'invalid_city':f'{city} City not found.\n Enter valid city'} print(context) context={'weather_data':weather_data} return context forms.py from django.forms import ModelForm from .models import City class CityForm(ModelForm): class Meta: model=City fields=['name'] home.html {% csrf_token %} {{form}} <button class="btn" type="submit" >Add city</button> -
Django three model which should be connected and depends of other
I can't wrap my head how to store / define the right model / relationship. I have following data: CATEGORY is their own model because i like to view / request in some situation only the category. But to this category I want set VALUE which I can only define onetime depending ON YYYY-MM. What make me difficult to achieve / understand how i get the relationship between VALUE <-> YYYY-MM but still maintain the connection / dependency to only one CATEGORY "Rent". -
Django model datefield with YYYY-MM instead YYYY-MM-DD
I would like to have a model YYYY_MM which stores 2022-01 2022-02 etc I thought the best method would be to use the DateField but it looks like that YYYY-MM-DD is enforced? -
Django models unknown column in field list(1054, "unknown column in 'field list'")
In Django I have problem in creating a model object through admin interface. When I attempt to create a model object, I get this error django.db.utils.OperationalError: (1054, "Unknown column 'restaurant_restaurant.addressStreet' in 'field list'") I know that the problem is related to the mySQl data base, but I have no idea of how to resolve this. My models.py from django.db import models # Create your models here. class Restaurant(models.Model): name = models.CharField(max_length = 255) addressStreet = models.CharField(max_length=255, help_text='Street name of the restaurant', blank = True) addressStreetNumber = models.CharField(max_length=50, help_text = 'street number', blank = True) addressPostCode = models.CharField(max_length=50, help_text = '4 digits post code', blank = True) addressCity = models.CharField(max_length=100, help_text = 'City name', blank = True) phone = models.CharField(max_length=100, help_text = 'Phone', blank = True) email = models.EmailField(max_length = 255, blank = True) cvr = models.CharField(max_length = 50, help_text = 'CVR number', blank = True) openingDaysRange1 = models.CharField(max_length=255, help_text='For example Monday - Friday', blank = True) openingHoursRange1 = models.CharField(max_length=255, help_text = 'For example 14:00 - 20:00', blank = True) openingDaysRange2 = models.CharField(max_length=255, help_text='For example Saturday - Sunday', blank = True) openingHoursRange2 = models.CharField(max_length=255, help_text = 'For example 12:00 - 22:00', blank = True) class Meta: ordering = ['-name'] def __str__(self): … -
how i can give a good struture to my defaultdict
I have a defaultdict on my views.py: output: defaultdict(<class 'list'>, {'List of tubes': ['2324', '98', '7654', 'List of auto:': [147, 10048, 1009, 10050, 10, 1647, 10648, 649, 1005]}) how i can give a better structure to my defaultdict ?