2012-03-09 12 views
5

मैं केवल एक विशेष स्थिरता में टीम से संबंधित खिलाड़ियों को दिखाना चाहता हूं। आम तौर पर जब मैं ऐसा करता हूं, तो यह मुझे डेटाबेस से मेरे सभी खिलाड़ियों को दिखाता है। यहाँ मेरी models.pyformfield_for_foreignkey और इनलाइन व्यवस्थापक

class InningsCard(models.Model): 
    fixture = models.ForeignKey(Fixture) 
    team = models.ForeignKey(Team) 
    runs = models.IntegerField(max_length=6, default=0) 
    wickets = models.IntegerField(max_length=6, default=0) 
    overs = models.FloatField(max_length=6, default=0.0) 

    def __unicode__(self): 
     return str(self.team) 

class BattingDetail(models.Model): 
    STATUS_CHOICES = (
     ('no', 'not out'), 
     ('bowled', 'bowled'), 
     ('caught', 'caught'), 
     ('lbw', 'lbw'), 
    ) 
    innings = models.ForeignKey(InningsCard) 
    player = models.ForeignKey(Player) 
    runs = models.IntegerField(max_length=5, default=0) 
    status = models.CharField(max_length=15, choices=STATUS_CHOICES, default='no') 

    def __unicode__(self): 
     return str(self.player) 

अब यहाँ है और मेरी admin.py formfield_for_foreignkey शामिल करने के लिए है, लेकिन यह काम नहीं करता।

class BattingInline(admin.TabularInline): 
    model = BattingDetail 
    extra = 0 

    def formfield_for_foreignkey(self, db_field, request=None, **kwargs): 

     if db_field.name == 'player': 
      kwargs = Player.objects.filter(team = request.team) 
     else: 
      pass 

     return super(BattingInline, self).formfield_for_foreignkey(db_field, request, **kwargs) 


class InningCardAdmin(admin.ModelAdmin): 
    inlines = [BattingInline] 

मैं गलत कहां जा रहा हूं?

// माउस

उत्तर

7
  1. आप क्वेरीसमूह के साथ पूरे kwargs बदल रहे हैं। kwargs एक शब्दकोश होना चाहिए, और विशेष कुंजी आप देख रहे हैं 'क्वेरीसमूह' है:

    kwargs['queryset'] = Player.objects.filter(team=request.team) 
    
  2. मैं लगभग सकारात्मक अनुरोध वास्तव में एक विशेषता team के लिए नहीं जा रहा है कर रहा हूँ। जब तक आप इसे अपने आप को कुछ कोड में नहीं जोड़ते हैं, तब तक आपको वर्तमान "टीम" प्राप्त करने के लिए एक और तरीका खोजने की आवश्यकता नहीं है। आप request.path से टीम आईडी को पार्स कर सकते हैं और उदाहरण के लिए लुकअप के लिए इसका उपयोग कर सकते हैं।

एक तरफ ध्यान दें के रूप में, else खंड अनावश्यक अगर आप सिर्फ वहाँ pass के लिए जा रहे है।

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