2015-06-16 60 views
1
class Schedule(models.Model): 
    landing = models.ManyToManyField(Place, related_name="landing_schedule", null=False)  

    def __unicode__(self): 
     return u'%s | %s' % (self.departure, self.landing) 

如何显示ManyToManyField的管理内部值?Django ManyToManyField在管理值列表

+0

显示你有他们是如何出现的偏好?你有没有注册这个模型的管理员类?如果是这样,它们应该默认显示在详细信息页面上。 –

+0

我已注册:classAdminAdmin(admin.ModelAdmin): actions = [search_flights]'但我只获得:Rio | flyerapp.Place.None: –

+0

哦,你只是在谈论返回的字符串?或者您是否也无法在管理员中设置M2M关系? –

回答

1

假设Place有一个name字段,下面应该做你想要的。

def __unicode__(self): 
    return u'%s | %s' % (self.departure, ", ".join(l.name for l in self.landing.all())) 

取决于您有多少条记录以及多少关系,可能会导致性能下降,所以要小心。

+1

是的,它是兼容的。我在想为什么没有尝试过。我会尽量避免性能问题。非常感谢。 –

+0

没问题。在极限上好主意;然而,如果你开始看到问题,它可能是所有'self.landing.all()'调用。如果只在Schedule中编辑离港 - 着陆关系,则可以创建一个'已加入的登陆字符串'字段,只要保存日程安排,该字段就会更新,然后在返回的字符串中使用该字段。 –

0

你可以写一个方法如下,并使其在管理列表显示 model.py

class Schedule(models.Model): 
    landing =models.ManyToManyField(Place,related_name="landing_schedule", null=False) 
    # 
    # 
    def list_of_landing(self): 
     return ",".join([x.something for x in self.place.all()]) 

admin.py

class ScheduleAdmin(admin.ModelAdmin): 

    list_display = ('list_of_landing')