Как вы динамически отображаете имена внешних ключей, а не первичные ключи на форумах 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)
Предварительный запрос для отображения имен, но не динамики при добавлении новых записей
Использование запаса, которое отображает объекты, но является динамичным при добавлении новых записей
Проблема, с которой я сталкиваюсь, заключается в том, что я добавляю нового игрока или событие или игру в базу данных через форму, поля для приведенной выше модели устарели, пока я не перезапущу сервер. Объект CreateMatch создается и отображается при запуске. Он не обновляет Наборы запросов, которые заполняют поля при добавлении новых записей. Как я могу сделать это динамичным и запрашивать данные по мере добавления новых записей без перезапуска приложения, а также отображать человеческие имена, а не объекты или первичные ключи внешнего ключа?