2011-08-07 14 views
26

modeli örnekDjango: get_or_create together_unique

class Example(Stat): 
    numeric = models.IntegerField(...) 
    date = models.DateField(auto_now_add=True,...) #auto_now_add=True was the problem 

    class Meta: 
     unique_together = ('numeric','date') 

)

72 ise ve '2011-08-07' zaten

Example.object.get_or_create(numeric=72,date='2011-08-07') 

django.db.utils.IntegrityError: (1062, "Duplicate entry '72-2011-08-07' 
yükseltir depolandığı ile yinelenen girişi Artırdı

sorunun nedeni: get_or_create, IntegrityError'u yükseltir, yani get_or_create'u kullanma fikri. bu bir hata ise

Emin değilim, senin problemin var senin get_or_create sen dahil değiliz fazla sütun ile ediliyor görünen bir bilet https://code.djangoproject.com/ticket/16587

+0

. Soruyu düzenledim, şimdi umarım daha iyidir – llazzaro

+0

Sadece get_or_create' ile aynı EXACT argümanı olan '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '] 'i döndürür. – agf

cevap

17

açıldı, bir Django posta listesinde yani this thread bakın.

Sen docs anlatıldığı gibi get_or_create ait defaults parametresini kullanın veya get_or_create doğru eşleşecek için, tüm sütunlar için değer belirtmeniz gerekir. Sorunun açık olmasaydı özür dilerim.

+1

Bu tür kullanımların varsayılanlara ihtiyacım olduğunu anlıyorum, ama get_or_create'deki paramlar sınıfta kullanılabilen tüm alanlar. Her neyse bu bilgi çok yardımcı oldu. Ayrıca, unique_together öğesini kaldırırsam, get_or_create çalışır. – llazzaro

+0

'get_or_create' ayrıca kısmen büyük-küçük harfe duyarlıdır - eğer farklı durumları varsa, bu eşleşmeyi bulamaz, ancak yine de benzersizliği kısıtlayabiliyor olabilirsiniz. – agf

+2

Cevabınızı okurken sorunu çözdüm. DateField auto_now_add = True kullanıyordu, bu yüzden soruma ilişkin bazı önemli bilgilerden kaçındım. Auto_now_add çözmek için = False şimdi çalışıyor – llazzaro