2010-12-30 45 views
8

Tôi bắt đầu sử dụng khung công tác django chỉ vài ngày trước và tôi rất cần một số trợ giúp với ứng dụng của mình.nội dung hiển thị django của một manytomanyfield

Nó bao gồm các lớp khách hàng, dự án, quản trị và quản trị viên, trong đó admin_payment giữ các id của quản trị viên và dự án trong số các nội dung khác.

Câu hỏi của tôi là cách tôi có thể hiển thị "tên của quản trị viên" của từng "dự án" trong danh sách dự án quản trị của tôi? lớp dự án riêng của mình không giữ id quản trị (các Admin_Payment không)

Hiện nay tôi đã cấu trúc sau: (sọc xuống)

models.py

class Admin(models.Model): 
    admin_name = models.CharField(unique = True, blank = False, null = False, max_length = 128, verbose_name = u'admin full name') 

    def __unicode__(self): 
     return self.admin_name 
    class Meta: 
     ordering = ('id',) 
     verbose_name = u'Admin Info' 

class Project(models.Model): 
    client = models.ForeignKey(Client, verbose_name = u'Client') 
    description = models.ForeignKey(Description, verbose_name = u'project description') 
    admins = models.ManyToManyField(Admin, verbose_name = u'Administrators', through = 'Admin_Payment') 

class Admin_Payment(models.Model): 
    admin = models.ForeignKey(Admin, verbose_name = u'Administrator') 
    project = models.ForeignKey(Project, verbose_name = u'project') 

admin.py (sọc xuống)

class AdminInline(admin.TabularInline): 
    model = Admin 

class ProjectAdmin(admin.ModelAdmin): 
    radio_fields = {'position': admin.HORIZONTAL, 'solution': admin.HORIZONTAL} 
    inlines = [AdminInline, ] 
    list_display = ['client','description','admin_name'] 

khách hàng và mô tả xuất hiện một cách chính xác trong dự án niêm yết nhưng tên quản trị không

Any help is appreciated (xin lỗi nếu tôi đăng tải bất cứ điều gì mà doesnt có ý nghĩa, tôi là một newbie trong python và django)

Trả lời

28

Hiển thị các nội dung của ManyToMany lĩnh vực không được hỗ trợ theo mặc định bởi django, bởi vì cơ sở dữ liệu sẽ được truy vấn cho mỗi hàng của kết quả. Bạn có thể hiển thị nó cho mình bằng cách adding a method to your Project-model:

class Project(models.Model): 
    .... 
    def admin_names(self): 
     return ', '.join([a.admin_name for a in self.admins.all()]) 
    admin_names.short_description = "Admin Names" 

và đưa admin_names trong list_display lĩnh vực của bạn!

+0

Điều đó rất hữu ích. Bất kỳ ý tưởng làm thế nào tôi có thể thêm một bộ lọc cho mỗi admin? – Thordin9

+0

đã tìm ra. cảm ơn một lần nữa – Thordin9

+0

là nó có thể thêm một verbose_name vào giá trị trả về? – Thordin9

Các vấn đề liên quan