2009-04-27 14 views
2

I-Modell zum Beispiel wie folgt aussehen:Wie Daten in Django Modell speichern, ohne ein Eingabefeld mit

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 

ich eine Form habe ich mit

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

den Eingang am Steuerung ich bin die Daten für das Treffen Feld immer mit

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

ich möchte das Datum Teil des Treffens Feld extrahieren (ich bin in der Lage zu bewerkstelligen Sie das). Dieser Datumsteil sollte die Eingabe für das Feld meeting_date sein. Das Feld meeting_date hat kein Eingabefeld im Formular und sollte automatisch ausgefüllt werden. Ich weiß nicht, wie dieses Datum zu bekommen Extrakt in das meeting_date Feld und wie sie gespeichert wird

Der Versuch, in def sauber (Selbst-)

cleaned_data['meeting_date'] = date_extract_from_meeting 

nicht

funktioniert Jede Hilfe ist sehr geschätzt

+1

Planen Sie die Änderung von meeting.date oder entry.meeting_date irgendwann in der Zukunft? Wenn nicht, dann sollten Sie einfach entry.meeting.date verwenden, anstatt die Daten zu duplizieren. – tghw

Antwort

5

Es gibt wahrscheinlich eine Möglichkeit, die Form save() -Methode zu überschreiben und das Datum in diesem Schritt zu setzen, aber ich kann keine Beispiele finden, dies zu tun.

Eine Art und Weise, die ich kenne würde sicher arbeiten, ist in passieren zu begehen = False (auf diese Weise die tatsächliche Datenbank Einsatz noch nicht geschehen) form.save:

instance = form.save(commit=False) 

Dann können Sie das Set Datum und speichern Sie das Objekt:

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

Ich hoffe, dies hilft.

+0

+1: Ich denke, das ist einer der Gründe, warum Commit = False in Django präsent ist. –

+0

Sieht gut aus, aber ich bin immer noch verloren. Wo ist das? Ist es in der MyEntryAdminForm (forms.ModelForm): oder irgendwie in der Klasse EntryAdmin (admin.ModelAdmin): – Helmut

+0

Ich habe es: def save_model (self, Anfrage, obj, Formular, ändern): obj.meeting_date = str (obj.meeting) [0:16] obj.save() Das funktioniert. Danke für deine Hilfe – Helmut