어떻게 작성된 기본값을 charfield에 추가 할 수 있습니까?장고 charfield 기본값을 작성
예
클래스 MyClass에 (XXX) :
type = models.ForeignKey(somewhere)
code = models.CharField(default=("current id of MyClass wich is autoincremented + type value"))
은 가능합니까?
어떻게 작성된 기본값을 charfield에 추가 할 수 있습니까?장고 charfield 기본값을 작성
예
클래스 MyClass에 (XXX) :
type = models.ForeignKey(somewhere)
code = models.CharField(default=("current id of MyClass wich is autoincremented + type value"))
은 가능합니까?
이렇게하려면 모델에서 save 메서드를 재정의합니다.
class MyClass(models.Model):
...
def save(self):
super(Myclass,self).save()
if not self.code:
self.code = str(self.id) + str(self.type_id)
self.save()
는 코드 빈 필드를 만드는 것처럼, 조심해야 할 물건이있다, 그러나 당신은 아이디어를 얻을.
당신은 락스 제안으로이 기본이며, 비어 있지 = 거짓, 코드가 좀 달라야 이후는, 그러나, 방법을 저장 오버라이드 (override) :
Class MyClass(models.Model):
...
def save(self):
if not self.id:
self.code = str(self.id) + str(self.type_id)
return super(Myclass,self).save())
당신은 또한 post_save 신호를 사용할 수
from django.db.models import signals
class MyClass(models.Model):
type = models.ForeignKey(somewhere)
code = models.CharField(blank=True)
def set_code_post(instance, created, **kwargs):
instance.code = str(instance.id) + str(instance.type_id)
instance.save()
signals.post_save.connect(set_code_post, sender=MyClass)
또는 그 문제에 관해서, 당신은 두 번) (저장 실행 방지하기 위해 pre_save 및 post_save 신호의 조합을 사용할 수 있습니다 ...
from django.db.models import signals
class MyClass(models.Model):
type = models.ForeignKey(somewhere)
code = models.CharField(blank=True)
def set_code_pre(instance, **kwargs):
if hasattr(instance, 'id'):
instance.code = str(instance.id) + str(instance.type_id)
def set_code_post(instance, created, **kwargs):
if created:
instance.code = str(instance.id) + str(instance.type_id)
instance.save()
signals.pre_save.connect(set_code_pre, sender=MyClass)
signals.post_save.connect(set_code_post, sender=MyClass)
"self.id가 아닌 경우"에서 어떻게 self.id 값을 사용할 수 있습니까? 어쩌면 당신은 "self.code가 아니라면"을 의미했을 것입니다. –
Django 1.5에서는 이것이 깨진 것 같습니다. 나는 새로운 개체가 저장 될 때까지 self.id 필드가 채워지지 않는다는 인상을 받고있다. 따라서 Lakshman의 답변에서 이중 저장. –