Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 20, 2013 10:11:42

KsimMiloff
Зарегистрирован: 2013-10-11
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать свой виджет для M2M through?

Всем привет,

У меня есть две М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.

В Инете не смог найти ничего похожего. В Джанге я первый раз , но изменять более простые виджеты (инпуты, текстареи и т.п.) у меня уже получается.

Офлайн

#2 Ноя. 20, 2013 13:04:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как создать свой виджет для M2M through?

1.
ManyToManyField нужна только в одной модели. Из Category убирайте нафиг.
2.
Зачем виджет? Сделайте просто без виджета.



Офлайн

#3 Ноя. 21, 2013 07:11:15

KsimMiloff
Зарегистрирован: 2013-10-11
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать свой виджет для M2M through?

1. Убрал М2М из категорий
2. Без виджета… как? Делал через inlines, мне не нравится предоставляемый функционал

Офлайн

#4 Ноя. 25, 2013 06:48:06

KsimMiloff
Зарегистрирован: 2013-10-11
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать свой виджет для M2M through?

Разобраться так и не смог.

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?

Отредактировано KsimMiloff (Ноя. 25, 2013 12:40:51)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version