2009-12-29 3 views
0

을 저장하기 전에 나는이있다 :Set 속성

나는 특정에 (필요) "주문"의 "수"속성을 설정해야합니다 제외하고, 작동
class OrderForm(ModelForm): 
    class Meta: 
     model = Order 
     exclude = ('number',) 

    def __init__(self, *args, **kwargs): 
     super(OrderForm, self).__init__(*args, **kwargs) 
     if self.initial.get('account', None): 
      self.fields['customer'].queryset = Customer.objects.filter(account=self.initial.get('account')) 



    def save(self, force_insert=False, force_update=False, commit=True): 
     m = super(OrderForm, self).save(commit=False) 

     # my custom code was here 

     if commit: 
      m.save() 
     return m 

번호. 나는 그것을하는 방법을 모른다. 나는 추가 시도 :

self.fields['number'] = 50 

"저장()"메서드 내 만 (분명히 즉 올바른 구문은 아니지만 내가 할 노력하고있어 암시) 나는 여전히 IntegrityError 때 저장을 클릭 얻는다. 설상가상으로 문제가되는 또 다른 문제는 Meta 속성이 제외 되었기 때문에 필드에 액세스 할 수 없다는 것입니다. (나는 사람들이 그것을 편집 할 수 없길 원합니다. .

대신 내 모델의 "save()"메소드 또는 "()"에서이 작업을 수행해야합니까?

답변

2

이것은 모델에서 더 깨끗한 것처럼 보입니다.

class Order(models.Model): 
    number = models.IntegerField(default=50) 
+0

50은 예제 일뿐입니다. 동적으로 (pseudo incrementing) 생성 할 것입니다. 또한 "initial.account"부분에 액세스해야합니다. 그 모델에서 나는 그것을 어떻게 할 것인가? 기본적으로 account = SpamAccount 인 모든 주문의 번호 속성을 읽고 싶습니다. – orokusaki

+0

보기와 마찬가지로 save() 메소드에서 쿼리를 실행할 수 있습니다. –

+0

매번 50으로 저장하고 양식에서 보내지 않으려합니다. 어떻게해야합니까? – Clayton

1

: 당신이 정말로 그것을 그런 식으로 모든 시간을 설정려고하는 경우에

def save(self, force_insert=False, force_update=False): 
    self.number = 50 
    super(Order, self).save(force_insert, force_update) 

는, 당신은 바로 같은 주문 모델을 선언 할 수 있습니다 :이 모델의 저장 방법에 구문 것 나는 이것이 당신이 "깨끗한"방법으로해야 할 일이라고 생각할 것입니다. 장고 양식 유효성 확인 문서는 here입니다. 본질적으로 그것은 당신에게 깨끗한 필드의 사전을 제공 할 것이고, 당신은 수많은 분야의 정보를 필요로하는 더 복잡한 검증을 할 수있게됩니다. 추가 또는 대체해야하는 항목을 포함하여 수정 된 데이터의 사전을 반환 할 수 있습니다.

모델 코드를 포함하면 조금 더 도움이 될 수 있습니다. 당신이

# my custom code was here 

self.fields

이 필드 목록이 아닌 그 값이다이 어디있을 수

0

m.number = 50 

을 넣어. 값에 액세스하려면 self.cleaned_data을 사용하십시오. 그러나 self.save()에서는 도움이되지 않습니다. m이 생성 된 인스턴스이므로 m.number을 사용하십시오.