2009-04-27 2 views
2

У меня есть модель, например так:Как хранить данные в Django модели без необходимости поле ввода

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

Планируете ли вы изменить какое-либо событие meet.date или entry.meeting_date в какой-то момент в будущем? Если нет, то, похоже, вам нужно просто использовать entry.meeting.date вместо дублирования данных. – tghw

ответ

5

Возможно, существует способ переопределить метод save() и поместить дату на этом этапе, но я не могу найти примеров этого.

так, что я знаю, будет работать точно, чтобы передать фиксации = False, чтобы form.save (так как фактически вставка базы данных пока не произойдет):

instance = form.save(commit=False) 

Затем вы можете установить дату проведения собрания и сохранить объект:

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

Надеюсь, что это поможет.

+0

+1: Я думаю, что это одна из причин, почему commmit = False присутствует в Django. –

+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

Смежные вопросы