Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 7th, 2012  |  syntax: None  |  size: 1.31 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Django Database Design: ManyToManyField when using Inlines
  2. class Author(models.Model):
  3.     name = models.CharField(max_length=30)
  4.     email = models.EmailField()
  5.  
  6. class Book(models.Model):
  7.     author = models.ForeignKey(Author)
  8.     title = models.CharField(max_length=50)
  9.  
  10. class Page(models.Model):
  11.     book = models.ForeignKey(Book)
  12.     contents = models.TextField(max_length=15999)
  13.  
  14. class Picture(models.Model):
  15.     page = models.ForeignKey(Page) # ideally, this should be many-to-many
  16.     picture_uuid = models.CharField(max_length=36)
  17.        
  18. class PictureAdmin(admin.ModelAdmin):
  19.     list_display = ('id', 'picture_uuid')
  20.  
  21. class PictureInline(admin.TabularInline):
  22.     model = Picture
  23.  
  24. class PageAdmin(admin.ModelAdmin):
  25.     list_display = ('id', 'page_uuid')
  26.  
  27.     inlines = [
  28.         PictureInline,
  29.         ]
  30.  
  31. class PageInline(admin.TabularInline):
  32.     model = Page
  33.  
  34. class BookAdmin(admin.ModelAdmin):
  35.     list_display = ('id', 'title')
  36.  
  37.     inlines = [
  38.         PageInline,
  39.         ]
  40.  
  41. class BookInline(admin.TabularInline):
  42.     model = Book
  43.  
  44. class AuthorAdmin(admin.ModelAdmin):
  45.     list_display = ('id', 'name', 'email')
  46.  
  47.     inlines = [
  48.         BookInline,
  49.         ]
  50.        
  51. class PictureInline(admin.TabularInline):
  52.     model = Page.pictures.through
  53.        
  54. class Page(models.Model):
  55.     ...
  56.     pictures = models.ManyToManyField(Picture)