Администратор Django: встроенная модель: как получить доступ к идентификатору текущей записи из метода has_delete_permission - PullRequest
0 голосов
/ 29 октября 2019

Django 2.2

admin.py , фон и вопрос в основном встроены в код:

class ProductAdmin(<SomeSuperAdmin>)
   inlines = [
       ProductCommentInline,
   ]
   # blah-blah...

class ProductCommentAdmin(<SomeSuperAdmin>):
   # blah-blah...

class ProductCommentInline(admin.TabularInline):  
    model = ProductComment

   # blah-blah...

    #this is called for each record in my queryset of ProductComments,
    # and depending on one field value I want it to return True or False
    def has_delete_permission(self, request, obj=None):
        #here I have obj.id which is id of Product, but not ProductComment

        #here I need to get somehow current ProductComment record data
        product_comment_record = <get_somehow_current_record_data >
        return product_comment_record.<some_bool_field>

Как получить доступ ктекущие данные записи ProductComment из метода has_delete_permission встроенной модели?

Я понимаю, что у меня есть полный набор ProductComment Queryset:

all_productcomments_records = self.get_queryset(request).filter(product_id=obj.id),

, но мне нужен доступ к current запись данных. Я ничего не сказал в self или request

1 Ответ

0 голосов
/ 30 октября 2019

ОК, в конце концов, у меня сработал (несколько адаптированный) ответ Бенуа Бланшон на этот пост: Django Admin - как предотвратить удаление некоторых строк ,Это дало мне доступ к переменной index, за которой я следовал.

from django.forms.models import BaseInlineFormSet

class ProductCommentInlineFormSet(BaseInlineFormSet):
    # set "delete" checkbox to grayed out state for already deleted (is_active=False)
    def add_fields(self, form, index):
        super().add_fields(form, index)
        form.fields['DELETE'].disabled = False
        if index != None:
            try:
                if not self.get_queryset()[index].is_active:
                    form.fields['DELETE'].disabled = True
            except:
                pass

class ProductCommentInline(admin.TabularInline): 
    model = ProductComment

    formset = ProductCommentInlineFormSet
...