Django Админ добавить / изменить отключить поле на основе выбора поля предварительного просмотра - PullRequest
0 голосов
/ 02 мая 2020

в моем django административном проекте у меня есть эта модель:

class m_pcontent(models.Model):
    MY_CHOICES = (
        ('T', 'Text'),
        ('I', 'Image'),
    )

    p_id = models.ForeignKey(m_pages, on_delete=models.CASCADE)
    p_type = models.CharField(max_length=1, choices=MY_CHOICES)
    p_content = models.TextField(null=True, blank=True)
    p_images = models.ForeignKey(m_pimg, on_delete=models.CASCADE, null=True, blank=True)
    ...

и в моем admin.py

class m_pcontentAdmin(admin.ModelAdmin):
    list_display = ('p_id', 'p_type', 'p_lang', 'p_dload', 'p_active')
    list_filter = ('p_id', 'p_type', 'p_lang')
    ordering = ('p_id', 'p_type')
    readonly_fields = [...]

я бы динамически сделал readonly поле p_content или Поле p_images в зависимости от того, какой пользователь выбрал поле p_type в области ДОБАВИТЬ / изменить (если выбрано Текст, то p_images должен стать доступным только для чтения, в противном случае, если выбранное изображение p_content должно стать доступным только для чтения)

Кто-то может мне помочь?

Огромное спасибо заранее

1 Ответ

0 голосов
/ 02 мая 2020
# You have to write get_readonly_fields in your admin class

def get_readonly_fields(self, request, obj=None):
    if obj:
        if obj.p_type=='T': # if user select 'T' for Text
            self.readonly_fields + ['p_images',]
        elif obj.p_type=='I': # if user select 'I' for Image
            self.readonly_fields + ['p_content',]
...