2012-03-09 24 views
5

Tôi chỉ muốn hiển thị các cầu thủ liên quan đến đội trong một trận đấu cụ thể. Thông thường khi tôi làm điều đó, nó cho tôi thấy tất cả người chơi của tôi từ cơ sở dữ liệu. Dưới đây là models.py tôiformfield_for_foreignkey và Inline Admin

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) 

Bây giờ và ở đây là admin.py tôi để bao gồm formfield_for_foreignkey, nhưng nó không hoạt động.

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] 

tôi có thể gặp vấn đề gì?

// chuột

Trả lời

7
  1. Bạn đang thay thế toàn bộ kwargs với queryset. kwargs phải là một từ điển, và chìa khóa đặc biệt mà bạn đang tìm kiếm là 'queryset':

    kwargs['queryset'] = Player.objects.filter(team=request.team) 
    
  2. Tôi gần như yêu cầu tích cực sẽ không thực sự có một thuộc tính team. Trừ khi bạn đã tự thêm nó vào một số mã không được hiển thị ở đây, bạn cần phải tìm cách khác để lấy "nhóm" hiện tại. Bạn có thể phân tích cú pháp id nhóm từ request.path và sử dụng nó để tra cứu, ví dụ.

Điều khoản không cần thiết nếu bạn chỉ cần pass ở đó.