2017-10-11 1 views
0

Ich versuche, einige Anfangsdaten in das Volumenfeld in CourseForm zu übergeben, aber aus irgendeinem Grund wird es nicht funktionieren. Das Volumenfeld ist ein ForeignKey zu einer Tabelle in der Datenbank.Django Anfangswert für Fremdschlüssel Feld

Es gibt mir keine Fehler; Es zeigt nur keine Informationen an.

Mein Modell mit dem jeweiligen Volumen Feld:

class Course(models.Model): 
    volume = models.ForeignKey(CourseVolume) 
    code = models.CharField(max_length=100, default=None) 
    # ... code shortend to simplify 

Mein Modelform mit seinem Modell

class CourseForm(ModelForm): 
    class Meta: 
     model = Course 
     fields = '__all__' 

Mein Blick auf Course gesetzt, wo ich die Ausgangsdaten für die CourseForm gesetzt bin versucht. Es scheint einfach nicht zu funktionieren. user.volume_preference gibt eine ganze Zahl von 1 bis x zurück, die die ID für das spezifische Volumen ist.

def view_course_create(request): 
    if request.method == 'POST': 
     form = CourseForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('teaching_courses') 
    else: 
     user = MbsUser.get_user_from_ad(request.session['username']) 
     if user.volume_preference is not None: 
      volume = user.volume_preference 
      form = CourseForm(initial={'volume': volume}) 
     else: 
      form = CourseForm() 
    return render(request, 'teaching/course_create.html', {'form': form}) 

Mein CourseVolume Modell:

class CourseVolume(CourseEnum): 
    published = models.BooleanField(default=False) 

class Meta(CourseEnum.Meta): 
    db_table = 'mbs_course_volume' 

Wie dieses Problem gelöst werden kann?

+0

sollten Sie die Anfangswerte für die Felder im CourseVolume-Modell angeben. Dann weist es dem Feld "Volumen" zu. –

+0

Versuchen Sie, die Volume-Instanz anstelle der ID zuzuweisen: 'volume = CourseVolume.objects.get (id = user.volume_preference)' – Alasdair

+0

Also ist es das CourseVolume-Modell, das ich ändern muss. Ich habe es meinem Beitrag hinzugefügt. Aber wenn man bedenkt, dass es 'db_table =' verwendet, scheint es so etwas nicht zu erlauben: 'self.fields [field_name] .initial = field_value' Ich habe deine Methode @Alasdair ohne Glück versucht. –

Antwort

0

Versuchen Sie, einen Standardwert für das Volumenfeld hinzuzufügen. Der Wert sollte die vorhandene ID der zugehörigen Tabelle (CourseVolume) sein.

volume = models.ForeignKey(CourseVolume, default=1) 
+0

Das funktioniert, aber ich würde nicht wissen, wie man diesen Wert dynamisch mit 'user.volume_preference' aktualisiert. Der Standardwert ist (kann) für jeden Benutzer unterschiedlich sein. –

Verwandte Themen