Администратор Django управляет ForeignKey в форме добавления / редактирования - PullRequest
0 голосов
/ 09 октября 2018

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

class temp_test_keywords(models.Model):
    id = models.AutoField(primary_key=True)
    main_id = models.ForeignKey(temp_main, on_delete=models.CASCADE, related_name='tm_ttk')
    test_id = models.ForeignKey(temp_case, on_delete=models.CASCADE, related_name='tc_ttk')
    key_id = models.ForeignKey(temp_keywords, on_delete=models.CASCADE, related_name='tk_ttk')
    key_val = models.CharField(max_length=200, null=True, blank=True, verbose_name='Value')
    key_group = models.CharField(max_length=200, null=True, blank=True, verbose_name='Group')
    #Fields for API permissions
    owner = models.ForeignKey('auth.User', related_name='ttestkey_owner', on_delete=models.CASCADE, verbose_name="API Owner")

В admin.py я создаю относительную ModelAdmin для списка управления, добавляю и редактирую опции:

class temp_test_keywordsAdmin(admin.ModelAdmin):

    list_filter = ('main_id__descr', 'test_id__descr')
    list_display = ('get_main_id', 'get_test_id', 'key_id', 'key_val', 'key_group')

    def get_main_id(self, obj):
        return obj.main_id.descr

    def get_test_id(self, obj):
        return obj.test_id.descr

    get_main_id.short_description = 'Main Template'
    get_main_id.admin_order_field = 'main_id__descr'

    get_test_id.short_description = 'Test Case'
    get_test_id.admin_order_field = 'test_id__descr'

Теперь, когда я просматриваю m данных в шаблоне changelist_view, все было сделано, но когда я пытаюсь добавить или отредактировать запись в моем поле test_id, я вижу объект (test_case_obj(1)), а не поле descr.Как я могу управлять ForeignKey для указания на определенное поле также в форме добавления / редактирования администратора?

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

1 Ответ

0 голосов
/ 09 октября 2018

Вы должны определить __str__ метод в ваших моделях для этого.Например:

class temp_case(models.Model):
    ...

    def __str__(self):
        return "%s" % (self.descr)

Если вам нужно другое представление для вашего объекта на панели администратора, вы можете создать настраиваемую форму и определить настраиваемое представление для ModelChoiceField, как описано здесь .

Документы предлагают подкласс ModelChoiceField и переопределить label_from_instance метод.

Надеюсь, это поможет.

...