보통 urls.py 파일에 여러가기 view 의 주소를 많이 지정해 둔다. 코딩중에 해당 페이지로 이동하거나 render 를 하고 싶다면 이 view 에 맵핑된 주소를 불러와야 하는데 주소를 바로 주게 되면 혹시 변경이 생기는 경우, 그냥 소스 전체를 찾아서 수정해야 한다. 이를 방지하기 위해 url 에 접근하는 함수가 몇개 있는데, 결론은 그냥 resolve_url redirect 이정도 쓰면 될듯 from django.shortcuts import resolve_url, redirect resolve_url('blog:post_detail', 10) # '/blog/10/' redirect('blog:post_detail', 10) 장고 템플릿에서 쓰는 방법은 다들 아는 바와 같이 아래처럼 사용하면 ..
LEFT JOIN 해서 테이블을 쫙 보여주고 싶었는데 ORM 의 기본기능으로는 안되는 건가? 일단 급한대로 raw sql을 직접 집어넣는 형태로 구현을 해 놓고 보자. item_list = Parts.objects.raw( "SELECT devices_parts.*, devices_lineparts.quantity \ FROM devices_parts \ LEFT JOIN devices_lineparts \ ON devices_parts.id=devices_lineparts.parts_id AND devices_lineparts.line_id=" + str(line_pk) + " ORDER BY devices_parts.group0_id ASC, devices_parts.group1_id ASC, dev..
요거 쉬운거 같은데, 예제들이 죄다 json으로 바꿔서 API 호출하는 형태로 되어 있는 것이 많네. 그냥 html 페이지에 있는 form submit을 jquery ajax 함수로 호출하는 방법을 정리해 두자. 이걸 한 이유는 submit 하고, 바로 그 정보를 이용해서 새창을 띄우도록 하려고 하니깐 ajax async false 로 동작 시켜야 했기 때문이다. 그냥 코드를 보자. $("#sel2").click(function(e){ e.preventDefault(); // avoid to execute the actual submit of the form. var button = $(this); var form = $("#mainform"); var actionUrl = form.attr('actio..
원래 자동으로 Date picker 가 포함되는 widget이 나왔던 거 같은데, 잘 안되네. DB Model 에 날짜 관련 필드를 설정한 곳은 widget 이 date picker 같은 것이 가능하도록 나와야 한다. 아래 코드처럼, class Meta 에 해당 필드의 Widget 을 직접 지정해주면 머 당연히 된다. class Meta: model = CreateNewPatient fields = ['first_name', 'nickname','last_name', 'date_of_birth', 'school_grade', 'sex', 'school'] widgets = { 'date_of_birth': forms.DateInput(format=('%m/%d/%Y'), attrs={'class':'fo..
너무 기본적이라 알고 있을 수 있지만, 불편했기에 정리해둠 Form, Modelform, BSModalModelForm 에서 request 객체를 직접 접근이 안되기에, 왜 안될까 보는 중에 __init__ 함수 호출시에 매개변수로 넘어온다는 것을 보니 그냥 그값을 저장해서 사용하자는 접근 코드를 보는 것이 낫겠다 class ProductProfileUpdateForm(BSModalModelForm, ProductProfileForm): # date = forms.DateField( # error_messages = { # 'invalid': 'YYYY-MM-DD 입력' # }) title = "" is_admin = 0 class Meta: model = ProductProfile fields = __..
그냥 노트 저장용, 선택된 값에 따라 특정 Input 을 비활성화 시킬 때 사용하는 코드 attr removeAttr prop 이런 것들을 잘써야 하네. $("[name$='-group0']").on("change", function(){ // //selected value // console.log($(this).val()); // console.log($("option:selected", this).attr("value")); // //selected option element // console.log($("option:selected", this)); // console.log($("option:selected", this).text()); // console.log($(this).find("op..
이거 가장 기본인데, 저장은 되는데 내가 그 값을 보고 쓸 수는 없다니, 말도 안된다. 쓰기만 하면 내부적으로 막 돌아가서 자동 저장되는 것처럼 보이니깐 막상 어떤 값을 뽑아 쓰려면 참나... 암튼 저장되는 객체의 필드를 참고하고 싶었는데 어떻게 참고해야 하는지 몰랐다. self.form_class.xxxx self.instance.xxxx self.form_class.instance.xxxx 다 실패, 정답은 self.object.xxxx @method_decorator(admin_required, name="dispatch") class PartsUpdateView(BSModalUpdateView): model = Parts filter = "" template_name = "devices/_moda..
model 에 바인딩된 model form view 등을 쓰게 되면 사용자 정의 필드, 혹은 값을 따로 받아서 처리하기가 약간 애매했다. 머든 방법은 있으니깐,, form 에서 사용자 변수 필드를 hidden 으로 보내줘도 받는놈이 받아야 하는데, model 에 연결된 것들은 해당 필드만 싹 가져오니깐 내가 고생해서 올려준 필드값을 볼 수 없다. 그래서 form_valid 를 overriding 해서 미리 보고, 내부 변수에 넣어두고 사용하자. @method_decorator(admin_required, name="dispatch") class PartsUpdateView(BSModalUpdateView): model = Parts filter = "" template_name = "devices/_mo..
일단 안 정보는 적어둬야 한다. SQL는 한번에 하나씩 수행되므로, 하나의 atomic 으로 묶여야 하는 오퍼레이션의 경우에는 처리 방법이 따로 있어야 할 듯 했는데....정답이 있었네 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pjok1122&logNo=221609547295 [Python / Django] DetailView, ListView, FormView, Form 활용하기 (오버라이딩, 전달 객체 추가, 인자 추가) 1. DetailView (Template에 추가 데이터 전달하기) DetailView는 queryset이나 model을 전달받고, url... blog.naver.com def clean(self): ..
자기 자신의 레코드 중에 하나를 Foreign Key 로 등록하는 경우와 필드를 합쳐서 중복이 생기지 않도록 설정하는 방법을 알아보자. 길게 설명이 필요없다. 그냥 아래 예제로 끝 class PartsGroup(models.Model): name = models.CharField(max_length=256, verbose_name="Name") level = models.CharField(max_length=1, default="0", verbose_name="Level", null=True, blank=True) parent = models.ForeignKey("self", on_delete=models.PROTECT, verbose_name="Parent", null=True, blank=True) ..
장고에서 Modal 창으로 처리하는 함수들을 위해 Django Bootstrap Modal Forms 라이브러리를 활용하고 있다. 홈페이지는 아래를 참고하세요. https://github.com/trco/django-bootstrap-modal-forms GitHub - trco/django-bootstrap-modal-forms: A Django plugin for creating AJAX driven forms in Bootstrap modal. A Django plugin for creating AJAX driven forms in Bootstrap modal. - GitHub - trco/django-bootstrap-modal-forms: A Django plugin for creating AJ..
서비스를 만들다 보면 여러가지 텍스트가 많이 있다. 한국사람만 쓰면 그냥 한글로 하면 되는데, 국제화 시대에 맞추려면 이런 표기말들은 언어별 테이블에서 가져다 쓸 수 있도록 해야 한다. 친절하게 이런 기능들은 이미 Django 에 내장되어 있다. 일단 아래 함수를 먼저 알아야 하고, 그 함수를 라벨이나 다국어가 필요한 곳에는 반드시 적용해 둬야 한다. ugettext 함수나 ugettext_lazy 함수로 라벨을 등록해 두자. from django.db import models from django.contrib.auth.models import User from django.utils.translation import ugettext_lazy as _ class Article(models.Model):..
html form 필드에 다양한 속성값을 주고 싶다...이건 기본이다. 장고 폼을 쓰면서 이런 속성을 쉽게 줄 수 있는 방법은 다양하게 있겠지만 그냥 아래 글 처럼 속성을 주는 것이 편할 듯 이글을 참고하시길 => Django Form에서 DOM class 설정 등의 front-end 조작법 # myapp/forms.py class MyForm( forms.ModelForm ): class Meta: model = MyModel def __init__( self, *args, **kwargs ): super( MyForm, self ).__init__( *args, **kwargs ) self.field[ 'my_field' ].widget.attrs.update( { 'class': 'form-cont..
제목이 거창한데 Django Ninja API 엔진에 기본 인증 방식에 Redis 를 이용하여 사용자별 JWT 토큰 값을 하나만 관리하도록 설정해 보았다. 머 Blacklist 비슷한거 아닌가? 로그인 한 후에 Redis 에 사용자 ID 키로 토큰을 저장해 두고, 다시 Login API가 호출되면 새로운 token이 발행되도록 한다. 이렇게 하면 사용기한이 남은 토큰이라도 재 발행되는 순간 쓸 수가 없게 된다. Redis 대신에 그냥 Session 정도 사용되도 될 듯 하지만 머 일단 구색으로 class AuthBearer(HttpBearer): def authenticate(self, request, token): try: print(request.headers) print(request.headers..
파일 생성을 임의로 막 할 수 없기에 메모리상에 데이터를 zip 으로 묶어서 다운로드 해야 하는 경우가 생긴다. 대부분의 예제들이 파일을 기반으로 되어 있어서 response 로 바로 내려주는 것을 찾기 어려웠는데, 아주 좋은 예제가 있어서 소개한다. 이미 많은 곳을 거쳐서 테스트 했는데 아래 코드가 그나마 동작 가능한 코드이다. https://stackoverflow.com/questions/67454/serving-dynamically-generated-zip-archives-in-django import io def my_downloadable_zip(request): zip_io = io.BytesIO() with zipfile.ZipFile(zip_io, mode='w', compression=..