2017-09-23 4 views
0

私はジャンゴでインスタンスデータを挿入する問題を抱えているが、これは私がデータを挿入するとき、私はこのエラーを取得し、これが私の見解djangoのビューからデータインスタンスを挿入するには?

def tambah_klaimhonor(request): 
    klaim = {} 
    user = request.user.id 
    pegid = DipPegawai.objects.filter(PegUser = user).values_list('PegID',flat=True)[0] 
    honoruser = DipHonorKegiatanPeg(PegID=pegid) 
    if request.method == 'POST': 
     form = KlaimHonorGuruKarForm(request.POST, instance=pegid) 
     if form.is_valid(): 
      form.save() 
      return redirect('index_klaimhonor') 
    klaim['form'] = KlaimHonorGuruKarForm() 
    return redirect('index_klaimhonor') 

である私のモデル

class DipPegawai(models.Model): 
    PegID = models.AutoField(primary_key=True) 
    PegNamaLengkap = models.CharField(max_length=100, blank=True, null=True) 
    PegUser = models.OneToOneField(User, null=True, blank=True, unique=True) 

class DipHonorKegiatanPeg(models.Model): 
    KegID = models.AutoField(primary_key=True) 
    PegID = models.ForeignKey(DipPegawai) 

ある

Exception Type: ValueError at /kegiatan/tambah_klaimhonor 
Exception Value: Cannot assign "41L": "DipHonorKegiatanPeg.PegID" must be a "DipPegawai" instance. 

私のフォーム

class KlaimHonorGuruKarForm(ModelForm): 
    class Meta: 
     model = DipHonorKegiatanPeg 
     fields = ('KegNama', 'KegTglMulai', 'KegJamMulai', 'KegTglAkhir', 'KegJamAkhir',) 
     labels = {'KegNama': 'Nama Kegiatan', 'KegTglMulai': 'Mulai Tanggal Kegiatan', 
        'KegJamMulai': 'Mulai Jam Kegiatan', 
        'KegTglAkhir': 'Akhir Tanggal Kegiatan', 'KegJamAkhir': 'Akhir Jam Kegiatan'} 
     widgets = { 
      # 'KegNama': TextInput(attrs={'required': True}), 
      'KegJamAkhir': TextInput(attrs={'required': True}), 
      'KegTglMulai': DateInput(attrs={'id': 'datepicker', 'data-date-format': 'yyyy-mm-dd', 'required': True}), 
      'KegTglAkhir': DateInput(attrs={'id': 'datepicker1', 'data-date-format': 'yyyy-mm-dd', 'required': True}), 
      'KegJamMulai': TextInput(attrs={'id': 'timepicker2', 'required': True}), 
     } 

私はDipHonorKegiatanPegにデータを挿入するためにユーザーログインを使用していますが、DipPegawaiのPegID.DipHonorKegiatanPegインスタンスを挿入しますか?

+0

[mcve]に減らすことはできますか? – xiawi

+0

i'vそれは 'pegid'のの' – Gusan

答えて

0

問題はhonoruser = DipHonorKegiatanPeg(DipPegawai)に集中していますが、私はあなたが完全に理解していないと思いますclassオブジェクトは仕事です。

あなたがDipHonorKegiatanPegのクラスはクラスDipPegawaiモデルからインスタンス化されることを意味するDipHonorKegiatanPeg(DipPegawai)としよう。

あなたは例えば、クラスのインスタンスにそれを変更する必要があります。

from django.shortcuts import get_object_or_404 


def tambah_klaimhonor(request, id): 
    .... 
    honoruser = get_object_or_404(DipHonorKegiatanPeg, PegID__PegID=id) 

    if request.method == 'POST': 
     form = KlaimHonorGuruKarForm(request.POST, instance=honoruser) 

注:id/pkは自動的にAutoFieldと主キーとしてジャンゴによって生成されます。


更新

# KegID = models.AutoField(primary_key=True) => return a `number`. 
# PegID = models.ForeignKey(DipPegawai) => return `ForeignKey` class instance. 

from django.shortcuts import (render, get_object_or_404) 
# ... 

def tambah_klaimhonor(request): 
    pegawai = get_object_or_404(DipPegawai, PegUser=request.user) 
    # or 
    # pegawai, truefalse = DipPegawai.objects.get_or_create(PegUser=request.user) 

    if request.method == 'POST': 
     form = KlaimHonorGuruKarForm(request.POST) 
     if form.is_valid(): 
      initial = form.save(commit=False) 
      initial.PegID = pegawai 
      initial.save() 
      form.save() 
      return redirect('index_klaimhonor') 
    else: 
     form = KlaimHonorGuruKarForm() 
    return render(request, 'templatename.html', {'form': form}) 
+0

を@xiawi減らします?それは何ですか? – Gusan

+0

変更@私の質問に編集した –

+0

どのような出力honoruser = DipHonorKegiatanPeg(PegID__PegID = pegid) 'に' honoruser = DipHonorKegiatanPeg(PegID = pegid) '私はsanca-kembang –

関連する問題