2010-12-14 17 views
47

मैं उसमें कुछ अतिरिक्त जानकारी संग्रहीत करना चाहता हूं, स्वचालित रूप से बनाया गया है, कई बहुत सारे शामिल हैं। मैं Django में ऐसा कैसे करूं?अतिरिक्त क्षेत्रों के साथ Django के ManyToMany रिश्ते

मेरे मामले में मेरे पास दो टेबल हैं: "कर्मचारी" और "परियोजनाएं"। मैं जो स्टोर करना चाहता हूं वह यह है कि प्रत्येक कर्मचारी को प्रत्येक परियोजना में प्रति घंटे काम करने के लिए कितना मिलता है, क्योंकि ये मान समान नहीं होते हैं। तो, मैं यह कैसे करूँगा?

"ManyToManyField" विधि के बजाय मेरे लिए क्या हुआ, उन नई सूचनाओं को संग्रहीत करने के लिए स्पष्ट रूप से एक तिहाई कक्षा/तालिका बनाएं और "विदेशी" विधि का उपयोग करके "कर्मचारी" और "परियोजनाओं" के साथ अपना संबंध स्थापित करें। । मुझे यकीन है कि यह काम करेगा, लेकिन क्या यह सबसे अच्छा तरीका है?

http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

मामले लिंक में कभी टूट जाता है:

+2

संभावित डुप्लिकेट [ManyToMany टेबल में स्तंभ जोड़ने के लिए कैसे (Django)] (http://stackoverflow.com/questions/12567151/how-to-add-column-in-manytomany-table-django) – ravi404

+0

@ravz क्यों इसे एक के रूप में बंद नहीं किया जाना चाहिए, इसके बजाए? – TylerH

+0

@TylerH यह एक पुरानी पोस्ट है। हालांकि दोनों सवालों के जवाब हैं, मैं इन्हें विलय करने का सुझाव दूंगा। – ravi404

उत्तर

69

यहाँ आप क्या हासिल करना चाहते का उदाहरण है

from django.db import models 

class Person(models.Model): 
    name = models.CharField(max_length=128) 

    def __str__(self):    # __unicode__ on Python 2 
     return self.name 

class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(Person, through='Membership') 

    def __str__(self):    # __unicode__ on Python 2 
     return self.name 

class Membership(models.Model): 
    person = models.ForeignKey(Person) 
    group = models.ForeignKey(Group) 
    date_joined = models.DateField() 
    invite_reason = models.CharField(max_length=64) 
की
+0

मैं टेम्पलेट में date_joined कैसे एक्सेस कर सकता हूं? Group.date_joined काम नहीं करता है। – Timo

+0

समूह की तिथि शामिल नहीं होगी, क्योंकि समूह स्वयं कुछ भी शामिल नहीं होता है। इसके बजाय, आप इसे सदस्य प्राप्त कर सकते हैं और अपना जुड़ने का समय प्राप्त कर सकते हैं। group.members.all(): – gruszczy

+1

में सदस्य के लिए मैं उपरोक्त दृष्टिकोण के साथ group.members.add() का उपयोग कैसे कर सकता हूं? – Dejell

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