2010-06-22 23 views
6

olduğu bir tablo aracılığıyla çoktan çoğaya Çoktan çoğa ilişkisi saklayan bir tablonun bulunduğu, ancak tek bir birincil anahtar sütunu olmayan eski bir veritabanım var. Django'yu onu kullanmak için ikna etmenin bir yolu var mı? ŞematikDjango: (yalnızca) bileşik anahtarın (yalnızca)

:

Product 1<---->* Labeling *<---->1 Label 

Labeling tablo bileşik birincil anahtar olarak (product_id,label_id) kullanır ve bu konuda Django bilgilendirmek için herhangi bir yol göremiyorum. (Sadece through'u kullanarak bana Unknown column 'labeling.id' in 'field list' verir.)

Özel SQL'e geri dönmem gerekiyor mu? Yoksa bir şey mi özlüyorum? Bu size yardımcı olur

cevap

1

birçok çoğa tablo için model bir unique_together eklerseniz, Django bu sütunları kullanmak yerine birincil bekliyor olacak anahtar id olarak adlandırıldı.

+0

Pek değil, aynı zamanda 'id 'alanını da yaratacaktır. Bir çözüm var (https://stackoverflow.com/a/28712960/52499). Ama aslında benim durumumda fazladan id alanına gitmeye karar verdim. Eski tablo yok. –

1
+0

Bunun olmasını beklemiyordum ... ama yaptı: 'unique_together', Django'yu birincil anahtar sütunu sormak için gerekli olan her şey. Cevabınızı buna eklediyseniz (ya da söz konusu kelimeleri) kabul edebilirim. (Afaik 'db_index' ilgisizdir: yalnızca bireysel alanlara uygulanır.) – Tikitu

+0

Artık tamamen eklediyseniz, Django'nun artık şikayet etmediği doğrudur * ancak * yine de tam olarak işlevsel değildir. Örneğin, parametrede belirtilen modeldeki silme (Model.Delete()) hariç olacaktır. Bunu cevap olarak verebilecek kadar uzmanım, cevap olarak Django, modelde birincil anahtar bulunmasını desteklemiyor. – Boaz

+0

@Tikitu Teşekkürler, teşekkürler, teşekkürler! Django'yu birkaç tane çoktan fazla ara tablo içeren eski salt okunur veritabanım için 'primary_key = True' sütununa ihtiyaç duymayacak bir yol bulmaya çalışarak saçlarımı yırtıyordum. 'Unique_together' hakkında bir şeyler biliyordum, ama Django'nun ısrarını' primary_key = True 'haline getireceğini anlayamadım. Artık Django 1.8'in bir ForeignKey alanında “primary_key = True” ayarlanmasıyla ilgili uyarıları yayınlaması, aniden çok önemli hale geldi. – CoreDumpError

İlgili konular