2012-02-24 14 views
5

मुझे पता है कि सामान्य रूप से Django user_id कहा जाता है, तो मैं बस अगर मैं तीन की जरूरत हैDjango: एक ही तालिका को संदर्भित एक तालिका में एक से अधिक विदेशी कुंजी कैसे

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() 

की तरह कुछ लेकिन क्या करना एक विदेशी कुंजी बनाने होगा Order में विशिष्ट विदेशी कुंजी जो सभी को User पर इंगित करती है? तीन विदेशी कुंजी user_created, user_modified, और user_status होगी।

+0

संभावित डुप्लिकेट [मैं Django में एक ही मॉडल के लिए दो विदेशी कुंजी कैसे कर सकता हूं?] (Https://stackoverflow.com/questions/543377/how-can-i-have-two-foreign-keys-to -the-same-model-in-django) –

उत्तर

13

समाधान वास्तव में सीधे आगे है:

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') 

तुम सिर्फ अलग related_name रों जब उपयोगकर्ता ऑब्जेक्ट से आदेश तक पहुँचने अस्पष्टता से बचने के निर्धारित करने होंगे।

+0

ठीक है, तो इस मामले में आपका 'उपयोगकर्ता' 'user_status' होगा? क्या कोई कारण है कि आप पहले से 'related_name' का उपयोग नहीं करते हैं? – hobbes3

+0

पहला व्यक्ति डिफ़ॉल्ट संबंधित नाम लेता है और इसे 'user.order_set' के माध्यम से एक्सेस किया जाता है - बेशक, कोई यहां कस्टम संबंधित नाम भी निर्दिष्ट कर सकता है। – alex

+0

... और हाँ, पहला उपयोगकर्ता user_status होगा - मैंने इसे आपकी पोस्ट में अनदेखा कर दिया और मेरा जवाब अपडेट किया – alex

संबंधित मुद्दे