当前的问题是我的表单向登录用户显示了曾经创建的所有“套牌”。该表单应仅显示登录用户创建的“牌组”。我可以过滤给定用户的牌组,但我无法将该信息作为用户可以选择的唯一选项传递。
模型.py
class Profile(models.Model):
profile_pic = models.ImageField(null=True, blank=True, default='Default.png', upload_to='images/')
user = models.ForeignKey(User, max_length=10, on_delete=models.CASCADE, null=True)
def __str__(self):
return str(self.user)
class Deck(models.Model):
deck = models.CharField(max_length=150)
is_cedh = models.BooleanField(default=False)
user = models.ForeignKey(User, max_length=10, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.deck
class Game(models.Model):
deck = models.ForeignKey(Deck, on_delete=models.CASCADE, null=True)
wincon = models.ForeignKey(Wincon, on_delete=models.CASCADE, null=True, blank=True)
tournament = models.BooleanField(default=False)
num_players = models.IntegerField(choices=NUM_PLAYERS_CHOICE, default=4)
start_pos = models.CharField(max_length=20, choices=START_POS_CHOICE, default=1)
mull = models.CharField(max_length=20, choices=MULL_CHOICE, default='1st 7')
outcome = models.CharField(max_length=10, choices=OUTCOME_CHOICE, default='Win')
medium = models.CharField(max_length=10, choices=MEDIUM_CHOICE, default='Paper')
date = models.DateField(auto_now=True)
time = models.TimeField(auto_now=True)
views.py
def game_tracker(request):
user_decks = Deck.objects.filter(user=request.user)
if request.method == "POST":
form = GameForm(request.POST)
if form.is_valid():
return HttpResponseRedirect('/track')
else:
form = GameForm()
context = {'form': form, }
return render(request, 'gametracker_app/gametracker.html', context=context)
表格.py
class GameForm(forms.ModelForm):
class Meta:
model = Game
exclude = {'date', 'time', }
labels = {
'deck': 'What deck',
'num_players': '# of Players',
'start_pos': 'Starting position',
'mull': 'Starting hand',
'outcome': 'Outcome',
'wincon': 'Wincon',
'medium': 'Paper or Online',
'tournament': 'Tournament',
}
您需要修改您的表单和views.py。
在您的表格中..
class GameForm(forms.ModelForm):
def __init__(self, user, *args, **kwargs):
super(GameForm, self).__init__(*args, **kwargs)
self.fields['deck'].queryset = Deck.objects.filter(user=user)
class Meta:
# ...
在你看来..
@login_required
def game_tracker(request):
user_decks = Deck.objects.filter(user=request.user)
if request.method == "POST":
form = GameForm(request.user, request.POST)
if form.is_valid():
return HttpResponseRedirect('/track')
else:
form = GameForm(request.user)
# ....