2017-09-23 67 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

输出什么?这是一个数字还是什么? –