Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
How do I structure my view for sending an api get request in Django?
I am sending a get request in my view and then using the response to fill my database and I need some confirmation on the following: should i make an api call inside of a view? what should that view response be? if i have done it wrong then what would be the right way to send get requests in Django? my_app/views.py class api(APIView): template_name = 'payment/api.html' def get(self, request): #I SEND THE GET REQUEST HERE config = configparser.ConfigParser() config.read('config.ini') r = requests.get(config['DEFAULT']['api']) response = r.json() #HERE I FILTER THE RESPONSE AND PUT IN A DB for item in response: if 'Covered Recipient Physician' in item.values(): person, _ = models.Person.objects.get_or_create( profile_id = int(item['physician_profile_id']), first_name = item['physician_first_name'].lower(), last_name = item['physician_last_name'].lower() ) address, _ = models.Address.objects.get_or_create( business_street = item['recipient_primary_business_street_address_line1'].lower(), city = item['recipient_city'].lower(), state = item['recipient_state'].lower(), country = item['recipient_country'].lower() ) business, _ = models.Business.objects.get_or_create( business = item['submitting_applicable_manufacturer_or_applicable_gpo_name'].lower(), ) business_address_link = models.Business_address_link.objects.create( business = business, address = address ) business_address_link.save() payment = models.Payment.objects.create( record_id = int(item['record_id']), amount = float(item['total_amount_of_payment_usdollars']), date = item['date_of_payment'], number_of_payments = int(item['number_of_payments_included_in_total_amount']), payment_form = item['form_of_payment_or_transfer_of_value'], nature_of_payment = item['nature_of_payment_or_transfer_of_value'] ) payment.save() person_payment_information = models.Person_payment_information.objects.create( person = person, business_address_link = business_address_link, payment = payment ) person_payment_information.save() -
GeoDjango options on bootstrapform multipolygon creation map?
I'm trying to display a form to create a multipolyon field htroug a webpage, I'm trying boostrapforms, but a black window is displayed on the geometry field, how can I state options for the map to be displayed? html {% extends 'base-dom.html' %} {% load bootstrap %} {% block content %} <head> {{ form.media }} </head> {% if error %} <br/> {{ error }} <br/> {% endif %} <br/> <h3>registry</h3> <br/> <div class="col-md-7"> <form method="POST" enctype="multipart/form-data"> {% csrf_token %} <fieldset class='form-group'> {{ form|bootstrap }} </fieldset> <input type="submit" class="btn btn-primary" value="Registrar"> </form> </div> {% endblock %} thanks -
Django: OneToOneField relation on UUID with auto creation
I am aware of similar questions such as this or this but I could not get to work none of the answers. I have two models in one models.py file: class Vehicle(models.Model): token = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=50) class Model(models.Model) token = models.OneToOneField(Users, on_delete=models.CASCADE, primary_key=True) color = models.CharField(max_length=10, blank=True) I want to upon adding a new Vehicle in django admin panel, a new record of Model also gets created and automatically bind the two on the same token which is in newly created Vehicle. I know that I should set the default value of OneToOneField in Model class but I do not know how to get the token of newly created Vehicle. -
Django: Accessing request.user in models.py
I'm trying to access the current user in models.py to make limit_choices_to equal to it I want the user to make transactions and I want him/her to choose from one of his/her salesmans class Salesman(models.Model): dealing_with = models.ForeignKey(User, on_delete = models.CASCADE, related_name = 'salesmans') name = models.CharField(max_length = 24) email = models.EmailField() phone_number = models.CharField(max_length = 16) class StockHistory(models.Model): stock = models.ForeignKey(Stock, on_delete = models.CASCADE, related_name = 'history') transaction_type = models.CharField(max_length = 4) item = models.CharField(max_length = 64) count = models.PositiveIntegerField() price = models.DecimalField(max_digits = 16, decimal_places = 4) salesman = models.ForeignKey(Salesman, on_delete = models.SET_NULL, null = True, related_name = 'transaction', limit_choices_to = {'dealing_with': user}) dt = models.DateTimeField(auto_now_add = True) However if I ignore that the user will able to choose any salesman even if he/she didn't create before -
Django Model designing in OneToOneField and ManyToManyField
I am writing a Django app movie Seat Booking, I am going through trouble designing a simple model. at first here you go for my current models: from django.db import models from django.contrib.auth import get_user_model class Seats(models.Model): seat_choice = ( ('AA', 'AA'), ('AB', 'AB'), ('BA', 'BA'), ('BB', 'BB'), ('CA', 'CA'), ('CB', 'CB') ) name = models.CharField(choices=seat_choice, max_length=2) def __str__(self): return self.name class Booking(models.Model): hall = models.OneToOneField(Seats) user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE) I want a user can buy/book one or more than one seats but the same user or other user cant buy a seat that already booked by someone or himself But the problem is, my current models, not working like what I want... Currently, it is working like if a user buys any ticket, the same user cant buys the ticket that bought by himself already! but the problem is, now another user can buy the ticket that already booked by someone and I don't want this at all. I want if a seat booked already by anyone, no one can book it again later but it can be unbooked by the user who booked! Can anyone please help me to achieve this? -
How to load an Image in a modal on a button click?
I'm using cropper.js to get the cropping coordinates but I want the users to be able to crop existing images not images they upload I already made the view and the url which takes the pk of the image but my problem is how to preview the images in the modal. I used this code to load the uploaded images in the modal /* SCRIPT TO OPEN THE MODAL WITH THE PREVIEW */ $("#button{{image.pk}}").change(function () { if (this.files && this.files[0]) { var reader = new FileReader(); reader.onload = function (e) { $("#image").attr("src", e.target.result); $("#modalCrop{{image.pk}}").modal("show"); } reader.readAsDataURL(this.files[0]); } }); I don't have a very good knowledge with js this is why i can't really figure it out. Thanks for the help I really appreciate it. -
Python not resolving host (timed out) when running with Gunicorn inside a Docker container (weasyprint needs to do that)
I have a Django app running in a docker container, which serves the app using Gunicorn. This app uses Weasyprint to generate a PDF, which loads a CSS dynamically. This CSS is served by the app, and it works fine (and loads instantly): host_pointing_to_that_same_machine.com/dynamic_css_path.css (it's NOT a static file, it's actually a path defined in the django URLs that outputs CSS) That's the weasyprint code: css = weasyprint.CSS(url=request.build_absolute_uri(reverse('dynamic_css_path'))) response = HttpResponse(pdf.write_pdf(stylesheets=[css]), content_type='application/pdf') This creates that URL correctly, and everything works good if instead of gunicorn I use the django built-in server (python manage.py runserver), both in my development machine and at the remote server inside the docker and so. But when I serve the app via gunicorn: gunicorn project.wsgi:application --bind 0.0.0.0:8000 Then python is unable to resolve the host name, which I proved by doing: 1) Entering the docker's app console and trying it: docker exec -it container_name /bin/ash # ping host_pointing_to_that_same_machine.com # ping any_other_host_pointing_an_external_machine.com Everything is fine. 2) Entering Django's console inside the docker container: # python manage.py shell >>> import urllib >>> r = urllib.request.urlopen(url='http://host_pointing_to_that_same_machine.com', timeout=10) >>> print('status: '+str(r.status)) Returns 200; everything OK. 3) Entering python's shell inside the docker container: # python >>> from urllib import request … -
Sending data from React form to Django Rest Framework
I am trying to send some data from my React frontend to my Django REST backend. The React data are the fields of a form. When the user click the button "next", I want this data to be sent to the back. My React functions handleSubmit(event){ event.preventDefault() fetch("/myapi/getreactinfotwitter",{ method:"POST", headers:{ 'Accept':'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ 'data_options': { 'partnerName': this.state.firmName, 'timeframes': this.state.timeframes, 'numberOfResults': this.state.numberOfResults, } }) }) I am not sure how I can "GET" this data using Django Rest Framework. I created a path in urls.py: path('getreactinfotwitter/', SendInfoFromReactTwitter.as_view(), name="getreactinfotwitter") Now I have to modify my views.py and serializers.py such that the data of the form are "grabbed" and I can manipulate them in the back. However, I am struggling to understand how I can do so. -
What should database store if blank=True in Django?
What should database store if i give no input to input form and blank=True i.e., models.CharField(max_length=20, blank=True) in Django ? hobby = models.CharField(max_length=20, blank=True) -
Edit update all schedules except primary key in Django Rest Framework
I wanna change all fields of a json object except 'pk' in DRF. I just need to keep one json data. When adding a new data ,this one should override existing data. Is there a way to do it with django ? my models.py class ClientUser2(models.Model): phone_number = models.CharField(max_length=20,unique=True) name = models.CharField(max_length=100,blank=True) status = models.IntegerField(default=1) class ClientNameSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = ClientUser2 fields = ('url','phone_number','name','status','pk') my views.py class ClientViewSet(viewsets.ModelViewSet): """ API endpoint that allows messages to be viewed or edited. """ queryset = ClientUser2.objects.all() serializer_class = ClientNameSerializer and it's my api root api_root -
How to link a css file in python
I'm sending a message with HTML via Python. Now, I'd like to style it, I've tried to write the style code into the html but there are problems because curling braces {}. Can I link the css file in Python? ''' html = f''' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link href="https://fonts.googleapis.com/css?family=Lato:400,900i&display=swap" rel="stylesheet"> <link rel='stylesheet' href="css/message_style.css"> #I've a static folder </head> <body> ''' -
I got ImportError and cannot import name Httpresponse from django
I am trying to build a website and I got this error: ImportError: cannot import name 'Httpresponse' from 'django.http' (C:\Users\vivek\Envs\asvc\lib\site-packages\django\http\__init__.py) I even tried from django.http -
Django Unit Testing 'else' statement in a View to achieve coverage
I'm running django test coverage for my interface app. The view below calls a WelcomeMessage model and basically says if there are no messages in that queryset it defaults to the "Welcome.." and if there are more than 1 "active" it will show the most recent one. Basically, how do I test the else line, when there there are more than 1 active messages? I've tried creating two different instances of WelcomeMessage with one being more recent, but when I run coverage it still highlights the else segment as red. Running coverage with: coverage run --source='.' manage.py test interface view: def index(request): msg = WelcomeMessage.objects.filter(active=True).order_by('-modified_at') if len(msg) == 0: msg = "Welcome message" else: msg = msg[0] # -- Need test coverage here -- context = {'msg': msg} return render(request, 'interface/index.html', context) unittest: def test_indexWelcomeMessage(self): welcome1 = WelcomeMessage.objects.create( created_at=datetime(2019, 1, 1), modified_at=datetime(2019, 1, 1), active=True, msg="Welcome message" ) welcome2 = WelcomeMessage.objects.create( created_at=datetime.now(), modified_at=datetime.now(), active=True, msg="Recent welcome message" ) messages = WelcomeMessage.objects.filter( active=True).order_by('-modified_at') if len(messages) == 0: msg = "testing this message" else: msg = messages[0] recentMsgVal = getattr(welcome2, 'msg') msg = messages[0] expectedMsgVal = messages.values_list('msg', flat=True).first() self.assertNotEqual(len(messages), 0) self.assertEqual(recentMsgVal, expectedMsgVal) # These asserts pass, but no coverage. WelcomeMessage model: class … -
MultiValueDictKeyError at / 'start_date'
Actually when i want to change calender date in django template it must run first code and if i dont it run else par but i am getting multivalue error def homepage(request): if request.method == 'GET': start_date = request.GET['start_date'] end_date = request.GET['end_date'] start = parser.parse(start_date) end = parser.parse(end_date) _start = json.dumps({"year":start.year, "month":start.month, "day":start.day}) _end = json.dumps({"year":end.year, "month":end.month, "day":end.day}) url="https://backend.makerobos.com/admin_apis/?key=g223p25HE23fdg2hHJBhU545HuhI&start={}&end={}".format(_start, _end) response=requests.get(url).json() return render(request,'robosapiapp/robos.html',{'data':response}) else: url="https://backend.makerobos.com/admin_apis/?key=g223p25HE23fdg2hHJBhU545HuhI&start={%22year%22:2019,%22month%22:2,%22day%22:11}&end={%22year%22:2019,%22month%22:3,%22day%22:1}" response=requests.get(url).json() return render(request,'robosapiapp/robos.html',{'data':response}) and this is my form page <form method="GET"> <label>From:<input id="start_date" type="date" name="start_date"></label> &nbsp; <label>To:<input id="end_date" type="date" name="end_date"></label> &nbsp; <input type="submit" name="search" id="search" value="Submit"> </form> -
Disablling cache in Django 1.8
I am having a weird bug that seems related to Djangos caching. I have a 3-step registration process: insert personal data insert company data summary view and submit all data for registration If person A walks through the process to the summary part but does not submit the form and person B does the same, person B gets the data of person A in the summary view. The data gets stored in a Storage object which carries the data through each step. Every new registration instanciates a new Storage object (at least it should). While debugging I've found that Django does not call any method in the corresponding views when the cache is already warmed up (by another running registration) and I guess that's why there is no new Storage instance. Hence the cross-polution of data. Now I'm perfectly aware that I can decorate the method with @never_cache() (which it already was) but that doesn't do the trick. I've also found that the @never_cache decorator does not work properly prior to Django 1.9(?) as it misses some headers. One solution that I've found was to set these headers myself with @cache_control(max_age=0, no_cache=True, no_store=True, must_revalidate=True). But that also doesn't work. So … -
Django 2.2: Creating models for multiple databases
I am new to Django 2.2 and I am building a small project that includes 2 databases not managed by Django. One is new and the other is legacy. I added them to the database list DATABASES = { 'default': { 'ENGINE' :'django.db.backends.mysql', 'NAME': 'petshows', 'USER':'somecoolusername', 'PASSWORD': 'somesecurepassword', 'HOST': 'localhost', 'PORT':'3306' }, 'pets': { 'ENGINE' :'django.db.backends.mysql', 'NAME': 'pets', 'USER':'mysecureusers', 'PASSWORD': 'somecoolpassword', 'HOST': 'localhost', 'PORT':'3306' } } I created models for petshows which seem to work fine. But I need to add some models so I can read foreign keys from the second database 'pets'. My models.py class ShowPets(models.Model): sp_id = models.IntegerField(primary_key=True) pet_id = models.IntegerField(blank=True, null=True) show_id = models.IntegerField(blank=True, null=True) created_at = models.DateTimeField(blank=True, null=True) updated_at = models.DateTimeField(blank=True, null=True) class Meta: managed = False db_table = 'show_pets' class Shows(models.Model): show_id = models.AutoField(primary_key=True) show_name = models.CharField(max_length=145, blank=True, null=True) show_date = models.DateField(blank=True, null=True) location_id = models.IntegerField(blank=True, null=True) org_id = models.IntegerField(blank=True, null=True) created_at = models.DateTimeField(blank=True, null=True) updated_at = models.DateTimeField(blank=True, null=True) def show_date_pretty(self): return self.show_date.strftime('%b %e %Y') class Meta: managed = False db_table = 'shows' I would like to create a model for Pets, pets table in the pets database, but I cannot figure out from the documentation how to be able to access the second … -
Reducing m-to-n relationship (between object and integer per user) to n-to-1 relationship in Django?
I have a very simple model: class A(models.Model): title = models.CharField(max_length=200) class B(models.Model): owner = models.ForeignKey(User, on_delete=models.CASCADE) a = models.ForeignKey(A, on_delete=models.CASCADE) level = models.IntegerField(default=0) Semantically, I have objects of Type A and use class B to associate an Integer to A per user. I wanted to show a list of all As and show the associated Bs for a user. Unfortunately this turned out to be harder than I expected: During a template, I can ask for the relation from A, but it will return all Bs, as I can not filter for users. During the view, I can not easily combine the two (as I could in an left outer join or similar). I thought of zipping the lists, but doing so would require creating/looking up single instances for each A, e.g.: A_list = [(_,B.objects.get_or_create(...)) for _ in A_list] Which just seems terrible. So my questions are: What is the canonical way to represent such a relationship of user data? If my representation makes sense, how to resolve the problem of associating the data? As I am just a beginner in Django, I just feel like I am missing something, as having user associated data seems like a default … -
Why django hashers are using assert?
I have a question regarding Django implementation of hashers. All of them implement verify method and are doing assert algorithm == self.algorithm. I know that assertions can be disabled through passing the flag -O to the python interpreter on production code. For example, BCryptSHA256PasswordHasher implements verify like that: def verify(self, password, encoded): algorithm, salt, hash = encoded.split('$', 2) assert algorithm == self.algorithm encoded_2 = self.encode(password, salt) return constant_time_compare(encoded, encoded_2) Is assert statement is meant to be used only during the development phase? or there are other reasons? -
Extending custom template tags to other templates in Django
I am using {% load subdomainurls %} in a project where content is dependent on a subdomain (company.example.com). These custom tags include "url" which takes a subdomain argument, {% url 'namespace:name' subdomain='company' %}. I am trying to load these custom tags in base.html so that I do not have to load them in every template. base.html **{% load subdomainurls %}** <!DOCTYPE html> <html lang = "en"> ---snip--- <body> <h1><a href="{% url 'orgs:home' subdomain=request.subdomain %}">App Title</a></h1> {% block content %}{% endblock content %} </body> </html> However, when I then extend base.html, I do not get the custom url tag, but rather the default. login_page.html {% extends 'orgs/base.html' %} {% block content %} <h3>Login a subdomain user:</h3> <form action="**{% url 'users:loginpage' subdomain=request.subdomain %}**" method = 'post'> {% csrf_token %} <table> {{form.as_table}} </table> <button name="submit">Login</button> </form> {% endblock content %} This produces an error from url trying to pass an argument to the url_conf that does not match any patterns. In order to get the template url to function properly, I have to include {% load subdomainurls %} in each template. I've tried loading the custom tags between the body tags and between {% block content %} {% endblock content %} in base.html, … -
Celery worker exit with shell
i use Celery with Django on a Debian server. I connect to the server with putty via ssh and start the celery worker with the following command celery -A django-project worker Now i would like to close putty but than the celery worker exit apparently. Why and what can i do to always run the celery worker? -
How can I ban a package from being added to Pipenv.lock and installed by Pipenv?
There are two packages which provide a module named jsonfield: django-jsonfield jsonfield Unfortunately, we have dependencies which depend on both and the two packages, while interchangable, store data to the database differently. This leads to weird and hard to catch bugs. Also, unfortunately, Pipenv doesn't have any deterministic order of operations when installing dependencies. Sometimes django-jsonfield is installed and sometimes jsonfield is installed. This means that sometimes, randomly, our application breaks because jsonfield is installed instead of django-jsonfield. Is there a way that I can ban django-jsonfield from being added to Pipenv.lock so that only jsonfield will be installed? -
How to pass data comming from database to templates dynamically (at run time /real time )
i have create one Django app in which i want to pass data to html template which is comming from my database (table's last entered user name ) and show it html page but user name can automatically change to new one without refreshing page -
Can't get max value of a field in Django Rest framework
I am trying to build a web app with DRF. I am trying to pass the customer id and display the maximum transaction he has done. This is my views.py class max_val(APIView): def post(self, request, *args, **kwargs): cid = json.loads(request.body).get('cid') queryset = model_name.objects.filter(customer_id=cid).aggregate(Max('transaction')) serialize = serializer_name(queryset, many=True) return Response(serialize.data, status=status.HTTP_200_OK) When I run this I get - HTTP 200 OK Allow: POST, OPTIONS Content-Type: application/json Vary: Accept [ { "cid": null, "transaction": null } ] It is not returning the maximum value. How can I do that ? -
achieve to intended query set in django by ORM
I have below models: class Post(models.Model): title = models.CharField( max_length=100, blank=True, ) description = models.CharField( max_length=1500, ) writer = models.ForeignKey( User, related_name='written_posts', related_query_name='written_post', null=True, on_delete=models.SET_NULL ) klass = models.ForeignKey( 'klass.Class', related_name='posts', related_query_name='published_post', on_delete=models.CASCADE ) users = models.ManyToManyField( User, through='PostUser', related_name="posts", through_fields=('post', 'user'), blank=True, ) class PostUser(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='post') user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user') student = models.ForeignKey(User, null=True, on_delete=models.CASCADE, related_name='student') and now i want get list of posts that are belong to classes id=1 or id=2 and then have PostUser with user_id=3 and student_id=4. i try : Post.objects.filter(klass_id__in=[1,2], users__user__in=[3], users__student__in=[4]).order_by('-create_date').distinct() and another try: qs = PostUser.objects.filter(post__klass_id__in=child.joined_classes_list, user_id=3, student_id=4).order_by('-id').distinct() result = [obj.post for obj in qs] but i can't achieve to goal and result is wrong,but without any error.thank you -
Django Python loaddata fails with django.db.utils.IntegrityError
Took over a database project and I am struggling to load the remote database into the local database. The app was built with django and the local database still relies on sqlite that comes with out of the box. The remote database is of postgresql type unfortunately and illogically. The code I am trying to run in the terminal: python manage.py loaddata *[path to backup.json file]* I get some integrity error so like any reasonable man I flushed the local db because since I want to anyhows load the remote data. python manage.py flush python manage.py syncdata Now when I try to load the data from the json file I get the following error: django.db.utils.IntegrityError: Problem installing fixture 'C:...\lit\backups\dbbackup_20190915_145546.json': Could not load contenttypes.ContentType(pk=1): UNIQUE constraint failed: django_content_type.app_label, django_conten t_type.model Changing the settings.py file from: `DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }` to DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'lit', 'USER': 'admin', 'PASSWORD': 'admin', 'HOST': 'localhost', 'PORT': '5432' } just gives me a new error. django.db.utils.IntegrityError: Problem installing fixture 'C:..\lit\backups\dbbackup_20190915_145546.json': Could not load contenttypes.ContentType(pk=17): duplicate key value violates unique constraint "django_content_type_a pp_label_model_76bd3d3b_uniq" DETAIL: Key (app_label, model)=(admin, logentry) already exists. I already ran python manage.py …