LINUX.ORG.RU

Кастомизация создания объекта в админке

 ,


1

2

Всем привет.

Столкнулся со следующей проблемой. Есть два объект и связь «many to many» между ними. Реализовал стандартными способами Django, с использованием «through».

class Product(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField(max_length=1000)
    categories = models.ManyToManyField(Category, related_name='products')

    def __unicode__(self):
        return self.title


class Specification(models.Model):
    title = models.CharField(max_length=255)
    products = models.ManyToManyField(Product, through='ProductSpecification', related_name='specifications')

    def __unicode__(self):
        return self.title


class ProductSpecification(models.Model):
    product = models.ForeignKey(Product)
    specification = models.ForeignKey(Specification)
    value = models.CharField(max_length=255)

    class Meta:
        unique_together = (('product', 'specification'),)

    def __unicode__(self):
        return '{0} ({1})'.format(self.product.title, self.specification.title)

Каким макаром дать возможность создавать и добавлять «спецификации» к продукту из стандартной админки, при создании продукта?

При попытке внести в admin.py следующее:

class ProductAdmin(admin.ModelAdmin):
    fields = ['categories', 'title', 'description', 'specifications']

admin.site.register(Product, ProductAdmin)

Получаю ошибку: Unknown field(s) (specifications) specified for Product. Check fields/fieldsets/exclude attributes of class ProductAdmin.

★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от eth1

Благодарю.

Для тех кто ответа так и не понял, привожу admin.py:

from django.contrib import admin
from .models.product import Product, Specification

admin.site.register(Specification)


class SpecificationInline(admin.TabularInline):
    model = Specification.products.through


class ProductAdmin(admin.ModelAdmin):
    inlines = [SpecificationInline]

admin.site.register(Product, ProductAdmin)

Откуда вы, некрофилы, берётесь? Почему не Python 3?

Дибильная привычка, ощущения, что для третьего питона ещё не переписали все необходимые библиотеки, хотя это уже, наверное, не так.

VirRaa ★★★
() автор топика
Ответ на: комментарий от VirRaa

Дибильная привычка, ощущения, что для третьего питона ещё не переписали все необходимые библиотеки, хотя это уже, наверное, не так.

from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible
class Product(models.Model):

    # whatever
    def __str__(self):
        # whatever

Это — в исходниках всей джанги. Работает с любым питоном.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.