2012-07-30 11 views
24

Kullanıcı sınıfı nesnesine çoktan çoğa ilişki oluşturmak istiyorum. Ben kendi içinde sınıf başvuru kullanabilirsiniz eğerDjango Çoktan çoğa (m2m) Aynı modele ilişkindir

class MyUser(models.Model): 
    ... 
    blocked_users = models.ManyToManyField(MyUser, blank=True, null=True) 

soru şudur:

Böyle bir şey var. Yoksa ManyToManyField ürününde "MyUser""self" inspect kullanmam gerekiyor mu? Yoksa başka bir (ve daha iyi) yolu var mı?

cevap

42

Teknik olarak, "MyUser" veya "self" işlemlerinin her iki durumda da bir dize olduğu sürece çalışacağından eminim. Gerçek sınıf MyUser'u geçemezsiniz. Bununla birlikte, dokümanlar her zaman "kendinden" kullanırlar. "Kendini" kullanmak sadece gerçekte olup bitenler hakkında daha açık değildir, aynı zamanda sınıf adı değişikliklerine karşı geçirgen değildir. Örneğin, daha sonra MyUser değerini SomethingElse olarak değiştirdiyseniz, daha sonra "MyUser" için de herhangi bir başvuruyu güncelleştirmeniz gerekir. Sorun şu ki, bir dize olduğundan, IDE'niz sizi hataya karşı uyarmayacaktır, bu yüzden eksikliğinizin daha büyük bir şansı vardır. "Kendini" kullanmak, sınıfın adı şimdi veya gelecekte ne olursa olsun işe yarayacaktır.

+0

üzerinde hiçbir etkiye sahip değildir. – Ron

23
class MyUser(models.Model): 
    ... 
    blocked_users = models.ManyToManyField("self", blank=True) 
+0

Teşekkürler, lütfen deneyin – Ron

+0

"self" çalışmıyor. Use blocked_users = models.ManyToManyField ("MyUser", blank = True, null = True) –

+3

"MyUser" demedim, "self" dedim: https://docs.djangoproject.com/en/dev/ref /models/fields/#django.db.models.ManyToManyField.symmetrical – Goin