Найти - Пользователи
Полная версия: Django admin. редактирование дочернего объекта класса через родителя
Начало » Django » Django admin. редактирование дочернего объекта класса через родителя
1
andrey16
alphabet.py:
class A(models.Model):
    type = models.CharField(max_length=1, null=True, blank=True)
    a1 = models.CharField(max_length=50)
    a2 = models.CharField(max_length=50)
    a3 = models.CharField(max_length=50)
class AAdmin(admin.ModelAdmin):
    list_display = ('id', 'a1', 'a2', 'a3',)
    
class B(A):
    b1 = models.CharField(max_length=50)
    b2 = models.CharField(max_length=50)
    b3 = models.CharField(max_length=50)
    
class BAdmin(admin.ModelAdmin):
    list_display = ('id', 'a1', 'a2', 'a3', 'b1', 'b2', 'b3',)
    
    def save_model(self, request, obj, form, change): 
        obj.type = B
        
class C(A):
    c1 = models.CharField(max_length=50)
    c2 = models.CharField(max_length=50)
    c3 = models.CharField(max_length=50)
    
class CAdmin(admin.ModelAdmin):
    list_display = ('id', 'a1', 'a2', 'a3', 'c1', 'c2', 'c3',)
    
    def save_model(self, request, obj, form, change): 
        obj.type = C

допустим я через админку создал С c id = 1 и B c id = 2.
если я зайду в таблицу A, то увижу там получившиеся строки.
если зайти на страницу редактирования объекта С с id = 1 через таблицу A, то у меня не будет возможности видеть и редактировать элементы c1, c2, c3.
ссылка в браузере будет выглядеть следующим образом:
http://127.0.0.1:8000/admin/alphabet/A/1/
следующего вида получается адрес страницы редактирования объекта B с id =2 через таблицу A:
http://127.0.0.1:8000/admin/alphabet/A/2/
для B у нас соответственно не будут доступны строки b1, b2, b3

как разрешить видеть и редактировать эти вышеописанные строки?
или как сделать переадресацию типа:
http://127.0.0.1:8000/admin/alphabet/<type>/<id>/
andrey16
andrey16
как сделать переадресацию типа:
http://127.0.0.1:8000/admin/alphabet/<type>/<id>/

class A(models.Model):
    type = models.CharField(max_length=1, null=True, blank=True)
    a1 = models.CharField(max_length=50)
    a2 = models.CharField(max_length=50)
    a3 = models.CharField(max_length=50)
    def edt_lnk(self):
        return '<a href="/admin/alphabet/%s/%s">%s</a>' % (self.type, self.id, self.id)
    edt_lnk.allow_tags = True
    edt_lnk.short_description = u'№'
    edt_lnk.admin_order_field = 'id'
class AAdmin(admin.ModelAdmin):
    list_display = ('edt_lnk', 'a1', 'a2', 'a3',)
    def changelist_view(self, request, extra_context=None):
        self.list_display_links = (None,)
        return super(AAdmin, self).changelist_view(request, extra_context=None)
    
Dr.Livsi
судя по тому, что написано, вы очень бегло прочитали документацию джанго. Рекомендую все же более внимательно ознакомиться с ней. Раз уж зашла речь о наследовании - вот вам: https://docs.djangoproject.com/en/1.6/topics/db/models/#model-inheritance
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