2015-01-20 10 views
5

को ForeignKey संबंध मैं इस तरह कुछ tring हूँ:सार वर्ग

class F(models.Model): 
    class Meta: 
     abstract = True 

class C1(F): 
class C2(F): 

class D(F): 
     pid = models.ForeignKey(Cx) 

जहां Cx या तो C1 या सी 2 हो सकता है, लेकिन मैं इसे कैसे करना पता नहीं है।

क्या कोई मुझे नेतृत्व कर सकता है? धन्यवाद

अजगर 3.3 Django 1.7

उत्तर

2

क्या आप पूछ रहे हैं संभव नहीं है सीधे, तो आप एक सार मॉडल के लिए एक ForeignKey नहीं हो सकता है, सार मॉडल से जोड़ने के लिए डेटाबेस तालिकाओं की जरूरत नहीं है के रूप में।

आप दो में से किसी एक चीज कर सकते हैं। या तो F एक ठोस वर्ग बनाओ, इसके लिए कुछ डाउनसाइड्स हैं, लेकिन यह जाने का एक बुरा तरीका नहीं है।

class F(models.Model): 
    pass 

class C1(F): 
    pass 
class C2(F): 
    pass 

class D(F): 
     pid = models.ForeignKey(F) 

या एक GenericforeignKey जो थोड़ा अधिक जटिल है, खासकर यदि आप मॉडल के विकल्पों को सीमित करने की जरूरत का उपयोग करें।

1

जैसा कि दूसरे उत्तर में बताया गया है, चूंकि अमूर्त वर्गों में कोई टेबल नहीं है, इसलिए आप उनसे संबंधित नहीं हो सकते हैं।

हालांकि, आप इस व्यवहार एक-से-एक रिश्तों के साथ की नकल कर सकते हैं:

class F(models.Model): 
    pass # stuff here 

class C1(models.Model): 
    f = models.OneToOneField(F) 

class C2(models.Model): 
    f = models.OneToOneField(F) 

class D(F): 
     pid = models.ForeignKeyField(F) 

आप अगर पीआईडी ​​C1 या सी 2 है मैन्युअल रूप से खोजने के लिए होगा, लेकिन आप एक परिदृश्य में जहाँ कभी नहीं करेंगे एफ का एक उदाहरण सी 1 या सी 2 के एक से अधिक उदाहरण से संबंधित है।

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