2009-04-27 3 views
2

입력 필드없이 장고 모델에 데이터를 저장하는 방법 :나는이 같은 예를 들어 모델이

class Meeting(models.Model): 
    date = models.DateTimeField(default=datetime.datetime.now) 
    team = models.CharField(max_length=100) 

    class Meta: 
     verbose_name_plural = u'Meetings' 
     ordering = ['-date', 'team'] 

    def __unicode__(self): 
     return u'%s %s' % (self.date, self.team) 


class Entry(models.Model): 
    meeting = models.ForeignKey(Meeting, blank=True) 
    meeting_date = models.DateField(null=True) 
    description = models.TextField() 

    class Meta: 
     verbose_name_plural = u'Entries' 

    def __unicode__(self): 
     return self.title 

은 내가

class MyEntryAdminForm(forms.ModelForm): 
class Meta: 
    model = Entry 

내가 가진 입력을 제어하고 양식을 데를 회의 필드의 데이터를 가져 오는 중

meeting = forms.ModelChoiceField(queryset=Meeting.objects.all(), empty_label=None) 

회의 필드의 날짜 부분을 추출하고 싶습니다. 이것을 관리하십시오). 이 날짜 부분은 meeting_date 필드에 대한 입력이어야합니다. meeting_date 필드에는 양식에 입력 필드가 없으며 자동으로 채워 져야합니다. 나는 meeting_date 필드에이 날짜 추출물을 얻는 방법을 모르고 어떤 도움이

작동하지 않습니다 그것을

데프 깨끗한 (자기)의 시도

cleaned_data['meeting_date'] = date_extract_from_meeting 

을 저장하는 방법 매우 높이 평가 됨

+1

향후 어느 시점에서 meeting.date 또는 entry.meeting_date를 변경 하시겠습니까? 그렇지 않다면 데이터를 복제하는 대신 entry.meeting.date를 사용해야 할 것 같습니다. – tghw

답변

5

아마도 save() 메소드를 덮어 쓰고 그 단계에서 날짜를 넣는 방법이있을 수 있습니다. 그러나이 작업의 예제를 찾을 수 없습니다.

instance = form.save(commit=False) 

는 그런 다음을 설정할 수 있습니다 : 나는 확실히 일하는 것이 알고

있는 방법에 통과 form.save하는 거짓 = (실제 데이터베이스 삽입이 아직 발생하지 않습니다 이런 식으로) 커밋하는 것입니다 회의 날짜를 저장하고 개체를 저장하십시오 :

instance.meeting_date = instance.meeting.date 
instance.save() 

희망이 도움이됩니다.

+0

+1 : 이것이 장고에 commmit = False가있는 이유 중 하나라고 생각합니다. –

+0

좋아 보이지만 나는 여전히 길을 잃어버린다. 이 위치는 어디입니까? 그것은 MyEntryAdminForm (forms.ModelForm)에 있습니다 : 또는 어떻게 든 EntryAdmin (admin.ModelAdmin) 클래스에 있습니다 : – Helmut

+0

대상 : def save_model (self, request, obj, form, change) : obj.meeting_date = str (obj.meeting) [0:16] obj.save() 그건 작동합니다. 도움을 주셔서 감사합니다 – Helmut