Как вы динамически отображаете имена внешних ключей, а не первичные ключи на форумах Django при добавлении новых записей?

У меня есть 3 дочерние таблицы, которые все связаны с родительской таблицей через отношения внешних ключей. Я создал форму для добавления записей в эту родительскую таблицу, которая также имеет эти отношения внешних ключей. Форма запрашивает эти дочерние элементы и показывает объект QuerySet с N записями в каждом объекте. Таким образом, я использовал этот подход для заполнения полей с несколькими вариантами выбора:

# Form
class CreateMatch(forms.ModelForm):
    p_choices = [(player.id, player.gamer_tag) for player in Players.objects.all()]
    e_choices = [(event.id, event.name) for event in Events.objects.all()]
    g_choices = [(game.id, game.name) for game in Games.objects.all()]

    player_one = forms.ChoiceField(choices=p_choices)
    player_two = forms.ChoiceField(choices=p_choices)
    game = forms.ChoiceField(choices=g_choices)
    event = forms.ChoiceField(choices=e_choices)

    class Meta:
        model = Matches
        fields = ['player_one', 'player_two', 'player_one_score', 'player_two_score',
                  'game', 'event', 'round', 'losers']

Это гарантирует, что такие поля, как player_one, заполнят все удобочитаемые имена в поле формы в виде выпадающего списка.

# View
from .forms import CreateMatch

def add_match(request):
    context = {
        "title": "Add New Event"
    }

    if request.method == 'POST':
        form = CreateMatch(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            return redirect('add match')  # Replace 'forum_home' with your actual URL name
    else:
        form = CreateMatch()
    return render(request, 'add_match.html', {'form': form, 'context': context})
# Parent model
class Matches(models.Model):
    player_one = models.ForeignKey(Players, on_delete=models.CASCADE,
                                   related_name='%(class)s_player_one')
    player_two = models.ForeignKey(Players, on_delete=models.CASCADE,
                                   related_name='%(class)s_player_two')
    player_one_score = models.IntegerField(default=0)
    player_two_score = models.IntegerField(default=0)
    game = models.ForeignKey(Games, on_delete=models.CASCADE, default=1)
    event = models.ForeignKey(Events, on_delete=models.CASCADE)
    round = models.CharField(max_length=100)
    losers = models.BooleanField(default=False)

Предварительный запрос для отображения имен, но не динамики при добавлении новых записей

enter image description here

Использование запаса, которое отображает объекты, но является динамичным при добавлении новых записей

enter image description here

Проблема, с которой я сталкиваюсь, заключается в том, что я добавляю нового игрока или событие или игру в базу данных через форму, поля для приведенной выше модели устарели, пока я не перезапущу сервер. Объект CreateMatch создается и отображается при запуске. Он не обновляет Наборы запросов, которые заполняют поля при добавлении новых записей. Как я могу сделать это динамичным и запрашивать данные по мере добавления новых записей без перезапуска приложения, а также отображать человеческие имена, а не объекты или первичные ключи внешнего ключа?

Вернуться на верх