2012-02-24 16 views
5

Normalde Django Ben üç gerekirse ben sadeceDjango: Çoklu yabancı anahtarlara sahip Nasıl

from django.db import models 

class Order(models.Model): 
    user = models.ForeignKey(User) 
    comments = models.CharField(max_length=400) 
    date_created = models.DateTimeField('created date') 

class User(models.Model): 
    name = models.CharField(max_length=200) 
    age = models.IntegerField() 

gibi bir şey ama ne olur user_id adlı bir yabancı anahtarı oluşturmak olacağını bildiğim bir tabloda aynı tabloya başvuran'daki farklı yabancı anahtar, tüm noktaları User'a mı? Üç yabancı anahtar, user_created, user_modified ve user_status olacaktır.

+0

Olası kopyası [Django'da aynı modele nasıl iki yabancı anahtar alabilirim?] (Https://stackoverflow.com/questions/543377/how-can-i-have-two-foreign-keys-to -the-aynı-modeli-in-django) –

cevap

13

çözüm yalındır aslında:

class Order(models.Model): 
    user_status = models.ForeignKey(User, related_name = 'orders_status') 
    user_created = models.ForeignKey(User, related_name = 'orders_created') 
    user_modified = models.ForeignKey(User, related_name = 'orders_modified') 

sadece Kullanıcı nesneden Sipariş erişirken karışıklıkları önlemek ayrı related_name s tanımlamanız gerekir.

+0

Tamam, bu yüzden 'user' bu durumda 'user_status' olurdu? İlki için 'related_name 'kullanmamanın bir nedeni var mı? – hobbes3

+0

Birincisi, varsayılan ilgili ismi alır ve 'user.order_set' üzerinden erişilir - tabiki, aynı zamanda burada da özel bir ilgili isim atayabilir. – alex

+0

... ve evet, ilki user_status olurdu - Bu yazıyı gözden kaçırdım ve cevabımı güncelledim – alex

İlgili konular