이전 필드에 대해 필드를 자동 증가시키는 방법이 있습니까? 예 : 이전 레코드의 값이 09-0001이면 다음 레코드가 있어야합니다. 09-0002 등등 ... 아이디어를 할당 받았습니까? save 메소드를 오버라이드하는 방법을 생각하고 있는데, 정확히 어떻게 확신 할 수 없습니까?Django의 값을 이전 필드에 대해 자동으로 증가시킵니다.
6
A
답변
8
장고는 모델에 둘 이상의 AutoField를 허용하지 않으며 기본 키를 이미 갖고 있습니다. 따라서 save를 오버라이드해야하고, 무엇을 증가 시킬지 알아보기 위해 테이블을 다시 봐야 할 것입니다. 이 같은
뭔가 : 당신의 저장 방법에 잠금 어떤 종류없이, 당신이 (코드 번호에 같은 값을 저장하려고 두 개의 스레드를) 동시성 문제로 실행할 수
class Product(models.Model):
code = models.IntegerField()
number = models.IntegerField()
...
def get_serial_number(self):
"Get formatted value of serial number"
return "%.2d-%.3d" % (self.code, self.product)
def save(self):
"Get last value of Code and Number from database, and increment before save"
top = Product.objects.order_by('-code','-number')[0]
self.code = top.code + 1
self.number = top.number + 1
super(Product, self).save()
# etc.
참고. SQL에서
1
AutoField는 장고가 모델 기본 클래스 'id'속성에 사용하는 필드 유형이지만 추가적인 자동 증가에 사용할 수 있습니다 전지.
예제와 같이 형식을 지정할 수는 없지만 save() 메서드를 재정 의하여 원하는 형식을 지정하는 사용자 지정 필드 형식을 만드는 것이 좋습니다.
+0
내가 이것을 할 수 있는지 알 겠어 ... 그 필드에 이전 레코드의 값을 검색 한 다음 1을 더 쉽게 입력하는 것과 같은 쉬운 방법이 있다고 생각했습니다. 어쨌든 –
0
:
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| code | int(11) unsigned | NO | PRI | NULL | auto_increment |
+-------+------------------+------+-----+---------+----------------+
장고는 :
self.code = None
self.number = top.number + 1
self.save() # or super(Product, self).save()
저장의 code
가 자동으로 증가합니다.
관련 문제
- 1. Django의 OneToOne 필드에 왼쪽으로 결합
- 2. SQLite는 다른 컬럼이 유일하지 않을 때 하나의 컬럼을 자동으로 증가시킵니다.
- 3. JPA : 동일한 값을 가진 필드에 대해 주석을 묶을 주석을 소유하십시오.
- 4. virtualenv에 Django의 이전 버전을 어떻게 설치합니까?
- 5. 백분율 입력 값을 자동으로 변환합니다.
- 6. Django의 Model 클래스에 대해 __getattribute__를 재정의하십시오.
- 7. django의 관리자에서 overriden save()에서 업데이트 된 M2M 필드에 액세스
- 8. 보안 걱정 필드에 대해 숨김
- 9. 필드에 대해 ProtoInclude를 사용 하시겠습니까?
- 10. 여러 필드에 대해 SELECT DISTINCT
- 11. Xcode는 자동으로 이전 의존성을 가져옵니다.
- 12. C# Toolstrip이 지원되는 양식을 증가시킵니다.
- 13. Django - 양식의 외부 필드에 대해 get_FOO_display가 필요합니다.
- 14. 값을 필드에 정확하게 할당하는 방법
- 15. GridView의 TextBox 필드에 값을 바인딩하려면
- 16. mysql이 데이터베이스에 LONGBLOB에 대해 UNHEX를 자동으로 설정합니다.
- 17. Java TextField getText() 이전 문자열 값을 반환합니다
- 18. div의 필드에 포커스를 자동으로 설정하려면 어떻게해야합니까?
- 19. Django의 템플릿에서 다른 필드의 값으로 모델의 필드에 액세스합니까?
- 20. django의 유효성 검사 오류에서 필드에 CSS 클래스 추가
- 21. django의 확장 된 플랫 페이지의 필드에 대한 액세스
- 22. TDBGrid의 조회 필드에 빈 값을 허용하려면 어떻게해야합니까?
- 23. 하나의 텍스트 필드에 값을 다른 텍스트 필드에 동시에 표시하는 방법
- 24. 어떻게 입력 필드에 MAXLENGTH를 자동으로 설정할 수 있습니까?
- 25. asp.net에서 Html 숨겨진 필드에 값을 설정하는 방법
- 26. JQuery와 쿠키는 이전 값을 사용
- 27. 이전 행 값을 선택하는 방법?
- 28. 이전 활동에서 값을 얻는 방법
- 29. 이전 페이지 값을 얻는 방법
- 30. 주소록에서 이전 값을 반환 중입니다.
덕분에 동시성 문제를 해결할 수 있습니다.'top = Product.objects.select_for_update (nowait = True) .order_by ('--code', '- number') [0]' –
예,'select_for_update()'를 사용하십시오. RDBMS가 먼저 행 잠금을 지원하는지 확인하십시오! (최근의 MySQL과 Postgres가한다). – Seth