Я создаю приложение, которое позволяет вам вводить ваше имя, адрес электронной почты, пароль в форме, и оно создает игрока с базовым целочисленным счетом ELO, полем даты и именем, а затем добавляю форму, которая создает игру с 2 Поля игрока, 2 целочисленных поля для забитых голов и поле даты. Приложение будет иметь 3 основных функции формы: 1) поиск истории игр игрока и оценка 2) добавить игру (я хочу добавить игры так, чтобы они были связаны с входящими игроками), и, наконец, зарегистрироваться (создать пользователя с имя, пароль и адрес электронной почты, а также имя для создания экземпляра Player, который будет привязан к пользователю. В настоящее время я могу получить доступ к своей странице администратора и вручную выбрать пользователя для игроков, которых я создал в терминале, но я не совсем понимаю, как Я должен создать свою регистрационную форму таким образом, чтобы Игрок создавался автоматически при регистрации пользователя. Надеюсь, когда я увижу, как работает привязка Игроков к Пользователям, я смогу выяснить, как привязать Игры к Игрокам
Я попытался добавить form.ModelField (Player) и скрыл поле, но я не уверен, как присвоить имя Player.
Мои формы.py:
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Player
class PlayerForm(UserCreationForm):
email = forms.EmailField(required=True)
player = forms.ModelForm(Player, widget=forms.HiddenInput)
class Meta:
model = User
fields = (
'first_name',
'last_name',
'email',
'password1',
'password2',
'player',
)
def save(self, commit=True):
user = super(PlayerForm, self).save(commit=False)
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
user.password1 = self.cleaned_data['password1']
user.password2 = self.cleaned_data['password2']
if commit:
user.save()
return user
my models.py
class Player(models.Model):
name = models.CharField(max_length=100)
elo = models.IntegerField()
date_added = models.DateTimeField(default=timezone.now)
user = models.OneToOneField(User, on_delete=models.CASCADE)
def __str__(self):
return str(self.name) + " = " + str(self.elo)
class Game(models.Model):
date_played = models.DateTimeField(default=timezone.now)
player1 = models.ForeignKey(Player,on_delete=models.CASCADE, related_name="+")
p1goal = models.IntegerField()
player2 = models.ForeignKey(Player,on_delete=models.CASCADE, related_name="+")
p2goal = models.IntegerField()
def __str__(self):
return str(self.date_played) + " - " + str(self.player1) + " " + str(self.p1goal) + " to " + \
str(self.p2goal) + str(self.player2)
Я попытался добавить user.player = Player (имя, elo) с полем elo, равным 1000, и именем пользователя user.first_name + "" + user.last_name, и я попробовал self.first_name + "" + self.last_name, но ни один не работал.