2017-09-23 61 views
0

我在Django中插入實例數據的問題,這是我的模型如何在django中從視圖插入數據實例?

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) 

這是我的看法

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

當我插入數據,我得到這個錯誤

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

心中已經降低它@xiawi – Gusan

回答

0

您的問題主要集中在honoruser = DipHonorKegiatanPeg(DipPegawai),我想您不完全瞭解class對象是否有效。

如果你嘗試用DipHonorKegiatanPeg(DipPegawai)意味着類的DipHonorKegiatanPegDipPegawai模型實例化。

您應將其更改爲類的實例,例如:

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自動Django在與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

我已經編輯我的問題@ sanca-kembang – Gusan

+0

變化'honoruser = DipHonorKegiatanPeg(PegID = pegid)''到= honoruser DipHonorKegiatanPeg(PegID__PegID = pegid)的'pegid'的' –

+0

輸出什麼?這是一個數字還是什麼? –