2015-02-25 21 views
19

Bileşik birincil anahtara sahip eski bir db tablosum var. Bu tabloyu kullanan bazı kodlar olduğu için, bir vekil anahtar içerecek şekilde yapıyı değiştirebileceğimi düşünmüyorum. Ve django'da, bu tabloyu birincil anahtar (kompozit olmayan) olmadığı için kullanamıyorum.django içinde birleşik birincil anahtar

Django modelleri kompozit birincil anahtarları destekler mi? Değilse, tablonun yapısını değiştirmeden herhangi bir geçici çözüm var mı?

P.S. Postgresql kullanıyorum.

cevap

29

kodunun altına benzer deneyin:

class MyTable(models.Model): 
    class Meta: 
     unique_together = (('key1', 'key2'),) 

    key1 = models.IntegerField(primary_key=True) 
    key2 = models.IntegerField() 

ya da yalnızca tekil karışık alanları isterseniz:

class MyTable(models.Model): 
    class Meta: 
     unique_together = (('key1', 'key2'),) 

    key1 = models.IntegerField() 
    key2 = models.IntegerField() 

DÜZENLEME: varsa bu yaklaşımın bir sorun olduğuna dikkat etmek istiyorum 3 sütun. Güncelleştirme sorguları çalışmaz, çünkü benzersiz olan ve açıkça başarısız olan alanları güncelleştirmeye çalışır (pk alanlarını "SET" ten hemen sonra).

+0

Neden çalışıyor? Meta sınıfında – khajvah

+0

, her bir alanın "unique_together" özniteliğinde, bu alanların belirli değerlerle karışık değerlerinin çoğaltılmaması gerektiğini belirlemektedir. – Mohsen

+0

Yani, "key2 = models.IntegerField (unique = True)" oluşturduğunuzda, 'key2'nin sadece bir' 'key1' için değil tüm değerler için benzersiz olması gerektiği anlamına gelmemeli midir? – khajvah

İlgili konular