Найти - Пользователи
Полная версия: Как создать свой виджет для M2M through?
Начало » Django » Как создать свой виджет для M2M through?
1
KsimMiloff
Всем привет,

У меня есть две М2М модели связанные через таблицу хранящую дополнительную информацию (логическое поле).

class LeisurePlace(models.Model):
    code    = models.CharField( u'Код', max_length = 250  )
    name    = models.CharField( max_length = 250, verbose_name = u'Название' )
    title   = models.CharField( max_length = 250, verbose_name = u'Заголовок' )
    desc    = models.TextField( verbose_name = u'Описание', blank = True )
    address = models.TextField( verbose_name = u'Адресс', blank = True )
    email   = models.CharField( max_length = 250, verbose_name = u'Эл. почта', blank = True )
    site    = models.CharField( max_length = 250, verbose_name = u'Сайт', blank = True )
    
    map_latitude  = models.DecimalField(max_digits = 17, decimal_places = 14, verbose_name = u'Широта', blank = True )
    map_longitude = models.DecimalField(max_digits = 17, decimal_places = 14, verbose_name = u'Долгота', blank = True )
    
    categories      = models.ManyToManyField('Category',       through = 'PlaceCategory', verbose_name = u'Категории' )
    
    publication_date = models.DateTimeField(u'Дата публикации')
    
    def __unicode__(self):
        return self.title
class Category(models.Model):
    code = models.CharField( u'Код', max_length = 250 )
    title = models.CharField( u'Заголовок', max_length = 250 )
    leisure_places = models.ManyToManyField('LeisurePlace', through = 'PlaceCategory')
    
    def __unicode__(self):
        return self.title
      
class PlaceCategory(models.Model):
    leisure_place = models.ForeignKey('LeisurePlace')
    category = models.ForeignKey('Category')
    is_basic = models.BooleanField(u'Базовая категория')

Мне хочется удобно назначать категории объектам с возможностью выбора основной категории (is_basic). Сейчас, за неимением других вариантов, использую inlines. Но это совсем не то, что мне нужно. Я вижу свой виджет примерно таким: таблица с тремя колонками, в одной название категрии, во второй checkbox, в третьей radio.

В Инете не смог найти ничего похожего. В Джанге я первый раз , но изменять более простые виджеты (инпуты, текстареи и т.п.) у меня уже получается.
FishHook
1.
ManyToManyField нужна только в одной модели. Из Category убирайте нафиг.
2.
Зачем виджет? Сделайте просто без виджета.
KsimMiloff
1. Убрал М2М из категорий
2. Без виджета… как? Делал через inlines, мне не нравится предоставляемый функционал
KsimMiloff
Разобраться так и не смог.

admin.py:
from django.db import models
from django.contrib import admin
from project.models import *
from forms import LeisurePlaceAdminForm
class PlaceCategoryInline(admin.StackedInline):
    model = PlaceCategory
    extra = 1
    
    
class CharacteristicValueInline(admin.TabularInline):
    model = CharacteristicValue
    extra = 1
class LeisurePlaceAdmin(admin.ModelAdmin):
    
    # regular stuff
    class Media:
        js = (
            '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', # jquery
        )
    
    form      = LeisurePlaceAdminForm
    inlines   = (PlaceCategoryInline, CharacteristicValueInline)
    
    fieldsets = [
        (None,                {'fields': ['code', 'name', 'title']}),
        ('Контактные данные', {'fields': ['email', 'site', 'address']}),
        ('Описание',          {'fields': ['desc'], 'classes': ['collapse']}),
        ('Координаты',        {'fields': ['map_latitude', 'map_longitude']}),
        #('Категории',         {'fields': ['categories']}),
    ]
admin.site.register(LeisurePlace, LeisurePlaceAdmin)

Есть способ вывести категории не через inlines?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB