Эй, ребята, у меня есть вопрос относительно формы и набора запросов:
- Я создаю форму, в которой я выбираю фракцию из списка фракций.
- После создания формы, Я перенаправляю в другую форму, где я могу добавить солдат в этот список, но я вижу всех солдат каждой фракции в этой форме, я хотел бы видеть ТОЛЬКО солдат той фракции, которую я выбрал в предыдущей форме.
Можете ли вы помочь, пожалуйста, по этому вопросу, пожалуйста? Я немного растерялся, что искать ...
Мои модели:
class Faction(models.Model):
title = models.CharField(max_length=30)
picture = models.FileField(blank=True,)
race = models.ForeignKey(Race, on_delete=models.CASCADE,default=None, blank=True, null=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("home")
class List(models.Model):
faction = models.ForeignKey(Faction, on_delete=models.CASCADE)
title = models.CharField(max_length=30)
format_points = models.IntegerField()
description = models.CharField(max_length=30)
author = models.ForeignKey(
get_user_model(),
on_delete=models.CASCADE,
)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("home")
class Soldier(models.Model):
title = models.CharField(max_length=30)
picture = models.FileField(blank=True,)
points = models.IntegerField()
factions = models.ManyToManyField(Faction)
def __str__(self):
return self.title
class SoldierToList(models.Model):
soldier = models.ForeignKey(Soldier, on_delete=models.CASCADE,)
list = models.ForeignKey(List, on_delete=models.CASCADE,)
author = models.ForeignKey(
get_user_model(),
on_delete=models.CASCADE,
)
Мои просмотры:
class ListCreateFormView(CreateView):
template_name = 'armybuilder_list_create.html'
model = List
form_class = CreateListForm
def form_valid(self, form):
form.instance.author = self.request.user
form.instance.race = "toto"
return super().form_valid(form)
def get_success_url(self):
return reverse_lazy('add_unit_to_list', kwargs={'pk': self.object.pk})
class AddUnitsToListFormView(LoginRequiredMixin,FormView):
model = SoldierToList
form_class = SoldierToListForm
template_name = 'armybuilder_add_unit_to_list.html'
def get_queryset(self):
return Soldier.objects.filter(factions=Tyranids) ## for some test, I need to change this line I think ?
def form_valid(self, form):
form.instance.author = self.request.user
form.instance.list_id = self.kwargs['pk']
return super().form_valid(form)
Мои формы:
class CreateListForm(forms.ModelForm):
class Meta:
model = List
fields = ('faction','title', 'format_points', 'description')
class SoldierToListForm(forms.ModelForm):
class Meta:
model = SoldierToList
fields = ('soldier',)
Мои URL:
path('list/create', ListCreateFormView.as_view(), name='create_list'),
path('list/own/<int:pk>/addunit', AddUnitsToListFormView.as_view(), name='add_unit_to_list'),
Спасибо за помощь и хорошего дня!