Django ile bir sayfa oluşturdum sqllite veri tabanına veri kaydediyor ve verileri güncelliyorum. Ancak güncelleme işlemini bir türlü gerçekleştiremedim. Size app içerisindeki view.py, panel.html ve personel_guncelle.html dosyalarımı atıyorum. Database dosyalarımın isimleri django admin panelden tanımlanan grupadi_lise.db şeklinde. Bir gruba ait birden fazla database var. Örneğin grupadi_temel.db, grupadi_lise.db, grupadi_meslek.db şeklinde dosyalar var. Kullanıcı seçimine göre bu db dosyalarından birine bağlanıp işlem yapıyor. Ama yazdığım kodlarda güncelleme işleminin gerçekleşmesini bir türlü sağlayamadım. Sorunun nereden kaynaklandığını da anlayamadım. Yardımcı olursanız çok mutlu olurum.
VIEW.PY
kullanici/views.py
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from django.contrib import messages
import os
import sqlite3
from django.conf import settings
@login_required
def panel(request):
secili_kurum = request.GET.get(“kurum”)
grupadi = request.user.groups.first().name if request.user.groups.exists() else “default”
veriler =
if secili_kurum:
db_name = f"{grupadi}_{secili_kurum}.db"
db_path = os.path.join(settings.BASE_DIR, 'veriler', db_name)
if os.path.exists(db_path):
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Eğer personel tablosu yoksa oluştur
cursor.execute('''CREATE TABLE IF NOT EXISTS personel (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tc TEXT NOT NULL,
ad TEXT NOT NULL,
soyad TEXT NOT NULL,
ise_giris TEXT,
isten_ayrilis TEXT,
calistigi_kurum TEXT,
telefon TEXT,
hesap_no TEXT,
icra FLOAT,
gunduz_saat INTEGER,
dyk_saat INTEGER,
gece_saat INTEGER,
gv_oran INTEGER NOT NULL DEFAULT 15
)''')
cursor.execute("SELECT id, tc, ad, soyad, ise_giris FROM personel")
satirlar = cursor.fetchall()
for row in satirlar:
veriler.append({
'id': row[0],
'tc': row[1],
'ad': row[2],
'soyad': row[3],
'ise_giris': row[4]
})
conn.close()
except Exception as e:
print("Veritabanı okuma hatası:", e)
else:
print("Veritabanı dosyası yok:", db_path)
return render(request, 'panel.html', {
'user': request.user,
'personeller': veriler,
'secili_kurum': secili_kurum
})
def personel_kaydet(request):
if request.method == ‘POST’:
data = request.POST
db_ref = data.get(‘genel_mudurluk’)
mapping = {
"Temel Eğitim Genel Müdürlüğü": "temel",
"Ortaöğretim Genel Müdürlüğü": "lise",
"Mesleki ve Teknik Eğitim Genel Müdürlüğü": "meslek",
"Din Öğretimi Genel Müdürlüğü": "din",
"Özel Eğitim ve Rehberlik Genel Müdürlüğü": "ozelegitim",
"Usta Öğreticiler": "ustaogretici",
"Emekli Usta Öğreticiler": "emekliustaogretici",
}
grupadi = request.user.groups.first().name if request.user.groups.exists() else "default"
db_suffix = mapping.get(db_ref)
if not db_suffix:
return render(request, 'panel.html', {'mesaj': "Geçersiz genel müdürlük!"})
db_name = f"{grupadi}_{db_suffix}.db"
db_path = os.path.join(settings.BASE_DIR, 'veriler', db_name)
if not os.path.exists(db_path):
return render(request, 'panel.html', {'mesaj': "İlgili veritabanı bulunamadı!"})
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS personel (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tc TEXT NOT NULL,
ad TEXT NOT NULL,
soyad TEXT NOT NULL,
ise_giris TEXT,
isten_ayrilis TEXT,
calistigi_kurum TEXT,
telefon TEXT,
hesap_no TEXT,
icra FLOAT,
gunduz_saat INTEGER,
dyk_saat INTEGER,
gece_saat INTEGER,
gv_oran INTEGER NOT NULL DEFAULT 15
)''')
cursor.execute('''INSERT INTO personel
(tc, ad, soyad, ise_giris, calistigi_kurum, telefon, hesap_no, icra, gunduz_saat, dyk_saat, gece_saat, gv_oran)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
(
data.get('tc'),
data.get('ad'),
data.get('soyad'),
data.get('ise_giris'),
data.get('calistigi_kurum'),
data.get('telefon'),
data.get('hesap_no'),
float(data.get('icra') or 0),
0, 0, 0, 15
)
)
conn.commit()
conn.close()
return render(request, 'panel.html', {'mesaj': "Kayıt başarılı!"})
return redirect('panel')
def personel_guncelle(request, pk):
grupadi = request.user.groups.first().name if request.user.groups.exists() else “default”
db_path = os.path.join(settings.BASE_DIR, ‘veriler’)
kayitli_db = None
# Kullanıcının grubuna ait tüm .db dosyalarını tarayarak personeli bulalım
for dosya in os.listdir(db_path):
if dosya.startswith(grupadi) and dosya.endswith('.db'):
tam_yol = os.path.join(db_path, dosya)
conn = sqlite3.connect(tam_yol)
cursor = conn.cursor()
try:
cursor.execute("SELECT * FROM personel WHERE id = ?", (pk,))
veri = cursor.fetchone()
if veri:
kayitli_db = tam_yol
break
except Exception as e:
print(f"Hata oluştu: {e}")
conn.close()
if not kayitli_db or not veri:
return render(request, 'panel.html', {'mesaj': 'Kayıt bulunamadı.'})
mapping = {
"Temel Eğitim Genel Müdürlüğü": "temel",
"Ortaöğretim Genel Müdürlüğü": "lise",
"Mesleki ve Teknik Eğitim Genel Müdürlüğü": "meslek",
"Din Öğretimi Genel Müdürlüğü": "din",
"Özel Eğitim ve Rehberlik Genel Müdürlüğü": "ozelegitim",
"Usta Öğreticiler": "ustaogretici",
"Emekli Usta Öğreticiler": "emekliustaogretici",
}
if request.method == 'POST':
data = request.POST
conn = sqlite3.connect(kayitli_db)
cursor = conn.cursor()
cursor.execute("""
UPDATE personel SET
tc = ?, ad = ?, soyad = ?, ise_giris = ?, calistigi_kurum = ?, telefon = ?, hesap_no = ?, icra = ?
WHERE id = ?
""", (
data.get('tc'),
data.get('ad'),
data.get('soyad'),
data.get('ise_giris'),
data.get('calistigi_kurum'),
data.get('telefon'),
data.get('hesap_no'),
float(data.get('icra') or 0),
pk
))
conn.commit()
conn.close()
redirect_kurum = mapping.get(data.get("calistigi_kurum"), "")
return redirect(f'/panel/?kurum={redirect_kurum}')
context = {
'personel': {
'id': veri[0],
'tc': veri[1],
'ad': veri[2],
'soyad': veri[3],
'ise_giris': veri[4],
'calistigi_kurum': veri[6],
'telefon': veri[7],
'hesap_no': veri[8],
'icra': veri[9],
}
}
return render(request, 'personel_guncelle.html', context)
PANEL.HTML
{% load static %}
BordroNet Panel body { display: flex; height: 100vh; margin: 0; overflow: hidden; } .sidebar { width: 250px; background-color: #343a40; color: white; padding: 20px; } .sidebar button { width: 100%; margin-bottom: 10px; } .main-content { flex-grow: 1; padding: 30px; overflow-y: auto; } .hidden { display: none; } .personel-listesi { margin-top: 20px; } .personel-item { display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid #ccc; padding: 10px 0; } .personel-item i { margin-right: 10px; cursor: pointer; }BordroNet
Personel Ekle PersonellerimBordroNet Sistemine Hoş Geldiniz
<form id="personelForm" class="hidden" method="POST" action="{% url 'personel_kaydet' %}">
{% csrf_token %}
<div class="mb-3">
<label class="form-label">Genel Müdürlük</label>
<select class="form-select" name="genel_mudurluk">
<option>Temel Eğitim Genel Müdürlüğü</option>
<option>Ortaöğretim Genel Müdürlüğü</option>
<option>Mesleki ve Teknik Eğitim Genel Müdürlüğü</option>
<option>Din Öğretimi Genel Müdürlüğü</option>
<option>Özel Eğitim ve Rehberlik Genel Müdürlüğü</option>
<option>Usta Öğreticiler</option>
<option>Emekli Usta Öğreticiler</option>
</select>
</div>
<div class="mb-3"><input name="tc" class="form-control" placeholder="TC"></div>
<div class="mb-3"><input name="ad" class="form-control" placeholder="Ad"></div>
<div class="mb-3"><input name="soyad" class="form-control" placeholder="Soyad"></div>
<div class="mb-3"><input name="ise_giris" class="form-control" placeholder="İşe Giriş Tarihi"></div>
<div class="mb-3"><input name="calistigi_kurum" class="form-control" placeholder="Çalıştığı Kurum"></div>
<div class="mb-3"><input name="telefon" class="form-control" placeholder="Telefon No"></div>
<div class="mb-3"><input name="hesap_no" class="form-control" placeholder="Hesap No"></div>
<div class="mb-3"><input name="icra" class="form-control" placeholder="İcra/Nafaka"></div>
<button type="submit" class="btn btn-success">Personel Kaydet</button>
</form>
<div id="personelListesi" class="hidden personel-listesi">
<h4>Personellerim</h4>
<div class="mb-3">
<label class="form-label">Kuruma Göre Seç</label>
<form method="get" onsubmit="return false;">
<select id="kurumSelect" name="kurum" class="form-select" data-secili-kurum="{{ secili_kurum }}" onchange="filtrelePersoneller(this.value)">
<option value="">-- Kurum Seçiniz --</option>
<option value="temel">Temel Eğitim Genel Müdürlüğü</option>
<option value="lise">Ortaöğretim Genel Müdürlüğü</option>
<option value="meslek">Mesleki ve Teknik Eğitim Genel Müdürlüğü</option>
<option value="din">Din Öğretimi Genel Müdürlüğü</option>
<option value="ozelegitim">Özel Eğitim ve Rehberlik Genel Müdürlüğü</option>
<option value="ustaogretici">Usta Öğreticiler</option>
<option value="emekliustaogretici">Emekli Usta Öğreticiler</option>
</select>
</form>
</div>
<div id="personelListeAlani">
{% if personeller %}
{% for p in personeller %}
<div class="personel-item">
<span>
<i class="bi bi-folder2-open" onclick="loadPersonelGuncelle('{{ p.id }}')"></i>
{{ p.ad }} {{ p.soyad }} - {{ p.tc }} - {{ p.ise_giris }}
</span>
</div>
{% endfor %}
{% else %}
<p>Henüz kayıtlı personel yok.</p>
{% endif %}
</div>
</div>
<div id="personelGuncelleAlani" class="hidden mt-4"></div>
{% if mesaj %}
<div id="popup-message" class="alert alert-success position-fixed bottom-0 end-0 m-4 shadow">
{{ mesaj }}
</div>
{% endif %}
</div>
<script>
function showForm() {
document.getElementById("welcome").classList.add("hidden");
document.getElementById("personelForm").classList.remove("hidden");
document.getElementById("personelListesi").classList.add("hidden");
document.getElementById("personelGuncelleAlani").classList.add("hidden");
}
function showPersoneller() {
document.getElementById("welcome").classList.add("hidden");
document.getElementById("personelForm").classList.add("hidden");
document.getElementById("personelListesi").classList.remove("hidden");
document.getElementById("personelGuncelleAlani").classList.add("hidden");
const secili = document.getElementById("kurumSelect").dataset.seciliKurum;
if (secili) document.getElementById("kurumSelect").value = secili;
}
function filtrelePersoneller(secim) {
const params = new URLSearchParams(window.location.search);
params.set("kurum", secim);
fetch(`/panel/?${params}`)
.then(response => response.text())
.then(html => {
const parser = new DOMParser();
const doc = parser.parseFromString(html, "text/html");
const yeniListe = doc.getElementById("personelListeAlani").innerHTML;
document.getElementById("personelListeAlani").innerHTML = yeniListe;
});
}
function loadPersonelGuncelle(id) {
fetch(`/personel-guncelle/${id}/`).then(response => response.text()).then(html => {
document.getElementById("personelForm").classList.add("hidden");
document.getElementById("personelListesi").classList.add("hidden");
document.getElementById("welcome").classList.add("hidden");
document.getElementById("personelGuncelleAlani").innerHTML = html;
document.getElementById("personelGuncelleAlani").classList.remove("hidden");
});
}
window.addEventListener("DOMContentLoaded", function () {
const popup = document.getElementById("popup-message");
if (popup) {
setTimeout(() => {
popup.style.display = "none";
}, 1500);
const form = document.getElementById("personelForm");
const selects = form.querySelectorAll("select");
const inputs = form.querySelectorAll("input");
inputs.forEach(input => {
input.value = "";
});
selects.forEach(select => {
if (select.name !== "genel_mudurluk") {
select.selectedIndex = 0;
}
});
}
const secili = document.getElementById("kurumSelect").dataset.seciliKurum;
if (secili) {
showPersoneller();
}
});
</script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">
PERSONEL_GUNCELLE.HTML
Personel Bilgilerini Güncelle
<form method="post">
{% csrf_token %}
<div class="row g-3">
<div class="col-md-6">
<label class="form-label">TC Kimlik No</label>
<input type="text" name="tc" value="{{ personel.tc }}" class="form-control" placeholder="TC Kimlik No">
</div>
<div class="col-md-6">
<label class="form-label">Ad</label>
<input type="text" name="ad" value="{{ personel.ad }}" class="form-control" placeholder="Adı">
</div>
<div class="col-md-6">
<label class="form-label">Soyad</label>
<input type="text" name="soyad" value="{{ personel.soyad }}" class="form-control" placeholder="Soyadı">
</div>
<div class="col-md-6">
<label class="form-label">İşe Giriş Tarihi</label>
<input type="text" name="ise_giris" value="{{ personel.ise_giris }}" class="form-control datepicker" placeholder="GG.AA.YYYY">
</div>
<div class="col-md-6">
<label class="form-label">Çalıştığı Kurum</label>
<select name="calistigi_kurum" class="form-select">
<option value="Temel Eğitim Genel Müdürlüğü" {% if personel.calistigi_kurum == "Temel Eğitim Genel Müdürlüğü" %}selected{% endif %}>Temel Eğitim Genel Müdürlüğü</option>
<option value="Ortaöğretim Genel Müdürlüğü" {% if personel.calistigi_kurum == "Ortaöğretim Genel Müdürlüğü" %}selected{% endif %}>Ortaöğretim Genel Müdürlüğü</option>
<option value="Mesleki ve Teknik Eğitim Genel Müdürlüğü" {% if personel.calistigi_kurum == "Mesleki ve Teknik Eğitim Genel Müdürlüğü" %}selected{% endif %}>Mesleki ve Teknik Eğitim Genel Müdürlüğü</option>
<option value="Din Öğretimi Genel Müdürlüğü" {% if personel.calistigi_kurum == "Din Öğretimi Genel Müdürlüğü" %}selected{% endif %}>Din Öğretimi Genel Müdürlüğü</option>
<option value="Özel Eğitim ve Rehberlik Genel Müdürlüğü" {% if personel.calistigi_kurum == "Özel Eğitim ve Rehberlik Genel Müdürlüğü" %}selected{% endif %}>Özel Eğitim ve Rehberlik Genel Müdürlüğü</option>
<option value="Usta Öğreticiler" {% if personel.calistigi_kurum == "Usta Öğreticiler" %}selected{% endif %}>Usta Öğreticiler</option>
<option value="Emekli Usta Öğreticiler" {% if personel.calistigi_kurum == "Emekli Usta Öğreticiler" %}selected{% endif %}>Emekli Usta Öğreticiler</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label">Telefon</label>
<input type="text" name="telefon" value="{{ personel.telefon }}" class="form-control" placeholder="05xx xxx xx xx">
</div>
<div class="col-md-6">
<label class="form-label">Hesap No</label>
<input type="text" name="hesap_no" value="{{ personel.hesap_no }}" class="form-control" placeholder="TRxx xxxx xxxx xxxx">
</div>
<div class="col-md-6">
<label class="form-label">İcra/Nafaka (Varsa)</label>
<input type="number" step="0.01" name="icra" value="{{ personel.icra }}" class="form-control" placeholder="0.00">
</div>
</div>
<div class="d-flex justify-content-between mt-4">
<a href="javascript:history.back()" class="btn btn-outline-secondary">
<i class="bi bi-arrow-left"></i> Vazgeç
</a>
<button type="submit" class="btn btn-success">
<i class="bi bi-check-circle"></i> Güncellemeyi Kaydet
</button>
</div>
</form>