I am designing a game of chess and I would like to initialize the fields with chess figures (State model) after the start of a new ChessParty
.
I read about overriding the save()
model method, but I don't know how to use it in my case.
I am reading about signals like post_save
, but I have the same problem.
Something like this could work?
def save(self, *args, **kwargs):
(Here i want create many instances of another Model)
super(ChessParty, self).save(*args, **kwargs)
And here is my code so far:
class ChessParty(models.Model):
chessparty_id = models.AutoField("ID partii", primary_key=True)
arbiter = models.ForeignKey(Arbiter, related_name='sedzia',
verbose_name="S?dzia")
white = models.ForeignKey(Player, related_name='Bia?e',
verbose_name="Bia?e figury")
black = models.ForeignKey(Player, related_name='Czarne',
verbose_name="Czarne figury")
tournament = models.ForeignKey(Tournament, verbose_name="Nazwa turnieju")
def __str__(self):
return "{white} vs {black}, ({tournament})"
.format(black=self.black, white=self.white, tournament=self.tournament)
class OneMove(models.Model):
party = models.ForeignKey(ChessParty, default='0', verbose_name="Partia")
chessman = (
('a1_w_rook', 'bia?a wie?a a1'), ('h1_w_rook', 'bia?a wie?a h1'),
('b1_w_knight', 'bia?y skoczek b1'), ('g1_w_knight', 'bia?y skoczek g1'),
('c1_w_bishop', 'bia?y goniec c1'), ('f1_w_bishop', 'bia?y goniec f1'),
('d1_w_queen', 'bia?y hetman d1'), ('e1_w_king', 'bia?y król e1'),
('a2_w_pawn', 'bia?y pion a2'), ('b2_w_pawn', 'bia?y pion b2'),
('c2_w_pawn', 'bia?y pion c2'), ('d2_w_pawn', 'bia?y pion d2'),
('e2_w_pawn', 'bia?y pion e2'), ('f2_w_pawn', 'bia?y pion f2'),
('g2_w_pawn', 'bia?y pion g2'), ('h2_w_pawn', 'bia?y pion h2'),
('a8_b_rook', 'czarna wie?a a1'), ('h8_b_rook', 'czarna wie?a h8'),
('b8_b_knight', 'czarny skoczek b1'), ('g8_b_knight', 'czarny skoczek g8'),
('c8_b_knight', 'czarny goniec c1'), ('f8_b_bishop', 'czarny goniec f8'),
('d8_b_queen', 'czarny hetman d1'), ('e8_b_king', 'czarny król e8'),
('a7_b_pawn', 'czarny pion a7'), ('b7_b_pawn', 'czarny pion b7'),
('c7_b_pawn', 'czarny pion c7'), ('d7_b_pawn', 'czarny pion d7'),
('e7_b_pawn', 'czarny pion e7'), ('f7_b_pawn', 'czarny pion f7'),
('g7_b_pawn', 'czarny pion g7'), ('h7_b_pawn', 'czarny pion h7'),
)
chessman = models.CharField(max_length=30, choices=chessman, default='pionek', verbose_name="Figura Szachowa")
mymove = []
for a, b in itertools.product('abcdefgh', '12345678'):
name = a + b
mymove.append((name, name))
mytuple = tuple(mymove)
move = models.CharField(max_length=2, choices=mytuple, default='a1', verbose_name="Ruch na")
class Meta:
abstract = True
class State(OneMove):
state_id = models.PositiveIntegerField(default=0, verbose_name="numer ruchu")
is_capture = models.BooleanField(default=False, verbose_name="Czy zbita")
capture_choice = (
('true', 'zbity'),
('false', 'nie zbity'),
)
is_capture = models.CharField(max_length=9, choices=capture_choice, default='false', verbose_name="Czy zbity")
See Question&Answers more detail:
os