Django IntegrityError: UNIQUE constraint failed user.id ( OnetoOneField)
Django IntegrityError: UNIQUE constraint failed user.id ( OnetoOneField)
我想将数据发送到数据库。但是错误说 return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError:唯一约束失败:dashboard_userusulan.ketua_id
[27/Dec/2021 23:46:14] "POST /dashboard/usulan-penelitian/ HTTP/1.1" 500 196035
我使用 CreateView 和 form_valid() 发送数据。我希望当我单击提交按钮 字段 'ketua' 时自动创建当前用户。
models.py
class UserUsulan(models.Model):
YEAR_CHOICES = [(r,r) for r in range(1984, datetime.date.today().year+1)]
JENIS_PENELITIAN_CHOICE = (
('DASAR', 'Penelitian Dasar'),
('MADYA', 'Penelitian Madya'),
('UTAMA', 'Penelitian Utama'),
)
BIDANG_PENELITIAN_CHOICE = (
('TEKNOLOGI', 'Teknologi'),
('SAINS', 'Sains'),
('PENDIDIKAN', 'Pendidikan'),
('EKONOMI', 'Ekonomi'),
('HUKUM', 'Hukum'),
('MANAJEMEN', 'Manajemen'),
)
TARGET_LUARAN_CHOICE = (
('JURNAL INTERNASIONAL', 'Jurnal Internasional Bereputasi'),
('JURNAL NASIONAL', 'Jurnal Nasional Terakreditasi'),
('PROSIDING INTERNASIONAL', 'Prosiding Internasional'),
('PROSIDING NASIONAL', 'Prosiding Nasional'),
('HKI', 'Hak Kekayaan Intelektual'),
('BUKU','Buku'),
('PRODUK','Produk'),
)
STATUS_USULAN_CHOICE = (
('DITERIMA', 'Diterima'),
('MENUNGGU', 'Menunggu'),
('DITOLAK', 'Ditolak'),
)
SUMBER_DANA_CHOICE = (
('LP3M', 'DIPA LP3M Universitas Mulia'),
)
SKEMA_PENELITIAN_CHOICE = (
('L', 'Lektor'),
('AA', 'Asisten Ahli'),
('TENDIK', 'Tenaga Pengajar'),
)
tahun = models.IntegerField(_('year'), choices=YEAR_CHOICES, default=datetime.datetime.now().year)
judul_penelitian = models.TextField(blank=True)
jenis_penelitian = models.CharField(max_length=16, blank=True, default="", choices=JENIS_PENELITIAN_CHOICE)
tmt_awal = models.DateField(null=True, blank=True)
tmt_akhir = models.DateField(null=True, blank=True)
bidang_penelitian = models.CharField(max_length=10, blank=True, default="", choices=BIDANG_PENELITIAN_CHOICE)
tujuan_sosial_ekonomi = models.TextField(blank=True)
sumber_dana = models.CharField(max_length=30, blank=True, default="", choices=SUMBER_DANA_CHOICE)
skema_penelitian = models.CharField(max_length=15, blank=True, default="", choices=SKEMA_PENELITIAN_CHOICE)
jumlah_dana_usulan = MoneyField(max_digits=14, decimal_places=2, default_currency='IDR')
target_luaran = models.CharField(max_length=23, blank=True, default="", choices=TARGET_LUARAN_CHOICE)
ketua = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='ketua_penelitian', on_delete=models.CASCADE, null=True, blank=True)
anggota = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='anggota_penelitian')
upload_file = models.FileField(upload_to='Penelitian/', null=True, blank=True)
status_usulan = models.CharField(max_length=8, blank=True, choices=STATUS_USULAN_CHOICE)
jumlah_dana_disetujui = MoneyField(max_digits=14, decimal_places=2, default_currency='IDR', null=True, blank=True)
keterangan_operator = models.TextField(null=True, blank=True)
com_reviewer_1 = models.TextField(null=True, blank=True)
com_reviewer_2 = models.TextField(null=True, blank=True)
views.py
class UserUsulanPenelitian(LoginRequiredMixin, CreateView):
template_name = 'dashboard/usulan-penelitian.html'
form_class = UserUsulanCreatePenelitianForm
success_url = 'dashboard/usulan-penelitian'
def form_valid(self, form):
#fetch user login data and input current user
form.instance.ketua = self.request.user
# form.save()
print(self.request.user)
# message.success(self.request, 'Berhasil Menambahkan Usulan Penelitian')
print('Success Menambahkan Data')
return super().form_valid(form)
将 ketua 字段 OneToOneField
编辑为 ForeignKey
ketua = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='ketua_penelitian', on_delete=models.CASCADE, null=True, blank=True)
我想将数据发送到数据库。但是错误说 return Database.Cursor.execute(self, query, params) django.db.utils.IntegrityError:唯一约束失败:dashboard_userusulan.ketua_id [27/Dec/2021 23:46:14] "POST /dashboard/usulan-penelitian/ HTTP/1.1" 500 196035
我使用 CreateView 和 form_valid() 发送数据。我希望当我单击提交按钮 字段 'ketua' 时自动创建当前用户。
models.py
class UserUsulan(models.Model):
YEAR_CHOICES = [(r,r) for r in range(1984, datetime.date.today().year+1)]
JENIS_PENELITIAN_CHOICE = (
('DASAR', 'Penelitian Dasar'),
('MADYA', 'Penelitian Madya'),
('UTAMA', 'Penelitian Utama'),
)
BIDANG_PENELITIAN_CHOICE = (
('TEKNOLOGI', 'Teknologi'),
('SAINS', 'Sains'),
('PENDIDIKAN', 'Pendidikan'),
('EKONOMI', 'Ekonomi'),
('HUKUM', 'Hukum'),
('MANAJEMEN', 'Manajemen'),
)
TARGET_LUARAN_CHOICE = (
('JURNAL INTERNASIONAL', 'Jurnal Internasional Bereputasi'),
('JURNAL NASIONAL', 'Jurnal Nasional Terakreditasi'),
('PROSIDING INTERNASIONAL', 'Prosiding Internasional'),
('PROSIDING NASIONAL', 'Prosiding Nasional'),
('HKI', 'Hak Kekayaan Intelektual'),
('BUKU','Buku'),
('PRODUK','Produk'),
)
STATUS_USULAN_CHOICE = (
('DITERIMA', 'Diterima'),
('MENUNGGU', 'Menunggu'),
('DITOLAK', 'Ditolak'),
)
SUMBER_DANA_CHOICE = (
('LP3M', 'DIPA LP3M Universitas Mulia'),
)
SKEMA_PENELITIAN_CHOICE = (
('L', 'Lektor'),
('AA', 'Asisten Ahli'),
('TENDIK', 'Tenaga Pengajar'),
)
tahun = models.IntegerField(_('year'), choices=YEAR_CHOICES, default=datetime.datetime.now().year)
judul_penelitian = models.TextField(blank=True)
jenis_penelitian = models.CharField(max_length=16, blank=True, default="", choices=JENIS_PENELITIAN_CHOICE)
tmt_awal = models.DateField(null=True, blank=True)
tmt_akhir = models.DateField(null=True, blank=True)
bidang_penelitian = models.CharField(max_length=10, blank=True, default="", choices=BIDANG_PENELITIAN_CHOICE)
tujuan_sosial_ekonomi = models.TextField(blank=True)
sumber_dana = models.CharField(max_length=30, blank=True, default="", choices=SUMBER_DANA_CHOICE)
skema_penelitian = models.CharField(max_length=15, blank=True, default="", choices=SKEMA_PENELITIAN_CHOICE)
jumlah_dana_usulan = MoneyField(max_digits=14, decimal_places=2, default_currency='IDR')
target_luaran = models.CharField(max_length=23, blank=True, default="", choices=TARGET_LUARAN_CHOICE)
ketua = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='ketua_penelitian', on_delete=models.CASCADE, null=True, blank=True)
anggota = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='anggota_penelitian')
upload_file = models.FileField(upload_to='Penelitian/', null=True, blank=True)
status_usulan = models.CharField(max_length=8, blank=True, choices=STATUS_USULAN_CHOICE)
jumlah_dana_disetujui = MoneyField(max_digits=14, decimal_places=2, default_currency='IDR', null=True, blank=True)
keterangan_operator = models.TextField(null=True, blank=True)
com_reviewer_1 = models.TextField(null=True, blank=True)
com_reviewer_2 = models.TextField(null=True, blank=True)
views.py
class UserUsulanPenelitian(LoginRequiredMixin, CreateView):
template_name = 'dashboard/usulan-penelitian.html'
form_class = UserUsulanCreatePenelitianForm
success_url = 'dashboard/usulan-penelitian'
def form_valid(self, form):
#fetch user login data and input current user
form.instance.ketua = self.request.user
# form.save()
print(self.request.user)
# message.success(self.request, 'Berhasil Menambahkan Usulan Penelitian')
print('Success Menambahkan Data')
return super().form_valid(form)
将 ketua 字段 OneToOneField
编辑为 ForeignKey
ketua = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='ketua_penelitian', on_delete=models.CASCADE, null=True, blank=True)