2017-10-11 30 views
0

ボリュームフィールドにいくつかの初期データをCourseFormに渡そうとしていますが、何らかの理由でそれが機能しません。ボリュームフィールドは、データベース内のテーブルに対するForeignKeyです。Django外部キーフィールドの初期値

これは私にエラーを与えません。どの情報も表示されません。それぞれのボリュームフィールドと

マイモデル:そのモデルと

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

ModelformCourse

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

に私はCourseFormの初期データを設定しようとしている私のビューを設定します。それはうまくいかないようです。 user.volume_preferenceは、特定のボリュームのIDである1からxまでの整数を返します。

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}) 

マイCourseVolumeモデル:

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

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

これはどのように解決することができますか?

+0

「CourseVolume」モデルのフィールドの初期値を記述する必要があります。次に、 'volume'フィールドに割り当てます。 –

+0

id: 'volume = CourseVolume.objects.get(id = user.volume_preference)'の代わりにボリュームインスタンスを割り当ててみてください。 – Alasdair

+0

これは私が変更するCourseVolumeモデルです。私は私のポストにそれを加えました。しかし、 'db_table ='を使っていると考えると、 'self.fields [field_name] .initial = field_value'のようなものは許可されていないようです。 あなたのメソッド@ Alasdairに運がないと試しました。 –

答えて

0

ボリュームフィールドのデフォルト値を追加してみます。値は、関連するテーブルの既存のID(CourseVolume)でなければなりません。

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

これはうまくいきますが、この値を 'user.volume_preference'で動的に更新する方法はわかりません。デフォルトは、ユーザーごとに異なります(可能)。 –

関連する問題