Как редактировать выпадающий список на сайте администратора django - PullRequest
0 голосов
/ 11 июня 2019

Итак, у меня есть три класса, как показано ниже.Когда я ввожу данные для table4, когда я ввожу название темы, я хочу, чтобы только вопросы этой выбранной темы появлялись в выпадающем списке для поля вопроса.Есть какой-либо способ сделать это?Кроме того, в моем admin.py я зарегистрировал только таблицы.

class table5(models.Model):
    topic_name=models.CharField(max_length=222,primary_key=True)

    def __str__(self):
        return self.topic_name


class table3(models.Model):
    id1=models.IntegerField(default=0)
    topic=models.ForeignKey(table5, related_name='topic1',on_delete=models.CASCADE)
    question=models.CharField(max_length=222,primary_key=True)
    answer=models.CharField(max_length=222)

    def __str__(self):
          return self.question

class table4(models.Model):
    username = models.CharField(max_length=222,primary_key=True)
    topic=models.ForeignKey(table5, related_name='topic111',on_delete=models.CASCADE)
    question1=models.ForeignKey(table3, related_name='question3',on_delete=models.CASCADE)
    answer = models.CharField(max_length=222)

    def __str__(self):
       return self.username

1 Ответ

0 голосов
/ 11 июня 2019

Вам просто нужно два переопределения, чтобы сделать это.

Сначала создайте два класса и верните желаемый текст, который вы хотите отобразить в опции внешнего ключа.

class QuestionChoiceField(forms.ModelChoiceField):
     def label_from_instance(self, obj):
         return "Question: {}".format(obj.question)

class TopicChoiceField(forms.ModelChoiceField):
     def label_from_instance(self, obj):
         return "Topic: {}".format(obj.topic)

Теперь в админке следующей модели добавьте следующую функцию.


class QuestionAnswerAdmin(admin.ModelAdmin):



    def formfield_for_foreignkey(self, db_field, request, **kwargs):
       if db_field.name == 'question':
          return QuestionChoiceField(queryset=Table3.objects.all())
       if db_field.name == 'topic':
          return TopicChoiceField(queryset=Table3.objects.all())
    return super().formfield_for_foreignkey(db_field, request, **kwargs)
admin.site.register(table4, QuestionAnswerAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...