質問編集履歴

3

外部キーのミスがあったため修正

2022/04/04 07:41

投稿

nika_nika
nika_nika

スコア38

test CHANGED
File without changes
test CHANGED
@@ -16,15 +16,15 @@
16
16
  company_id = models.BigAutoField(primary_key=True,validators=[MaxValueValidator(8)])
17
17
  company_code = models.IntegerField()
18
18
  company_name = models.CharField(max_length=255)
19
- company_code = models.ForeignKey('Org_division', on_delete=models.CASCADE,null=True,)
19
+ company_code = models.ForeignKey('Company', on_delete=models.CASCADE,null=True,)
20
- staff_code = models.ForeignKey('Org_staff', on_delete=models.CASCADE,null=True,)
20
+ staff_code = models.ForeignKey('Staff', on_delete=models.CASCADE,null=True,)
21
21
 
22
22
  ```
23
23
  マイグレーションを行うと
24
24
 
25
25
  ```migrations
26
26
  migrations.CreateModel(
27
- name='Org_division',
27
+ name='Company',
28
28
  fields=[
29
29
  ('company_id', models.BigAutoField(primary_key=True, serialize=False, validators=[django.core.validators.MaxValueValidator(8)])),
30
30
  ('company_name', models.CharField(max_length=255)),

2

migrationの追加。Djangoバージョンの追加。別途、解決案の追加。

2022/04/04 07:38

投稿

nika_nika
nika_nika

スコア38

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  # 前提
2
- Python
2
+ Python==3.9.10
3
- Django
3
+ Django==3.2.12
4
4
  MySQL
5
5
  モデルの定義について。
6
6
 
@@ -13,10 +13,24 @@
13
13
 
14
14
  ```models.py
15
15
  class Company(models.Model):
16
+ company_id = models.BigAutoField(primary_key=True,validators=[MaxValueValidator(8)])
16
17
  company_code = models.IntegerField()
17
18
  company_name = models.CharField(max_length=255)
18
- company_code = models.ForeignKey('Company, on_delete=models.CASCADE,null=True,)
19
+ company_code = models.ForeignKey('Org_division', on_delete=models.CASCADE,null=True,)
19
- staff_code = models.ForeignKey('Staff', on_delete=models.CASCADE,null=True,)
20
+ staff_code = models.ForeignKey('Org_staff', on_delete=models.CASCADE,null=True,)
21
+
22
+ ```
23
+ マイグレーションを行うと
24
+
25
+ ```migrations
26
+ migrations.CreateModel(
27
+ name='Org_division',
28
+ fields=[
29
+ ('company_id', models.BigAutoField(primary_key=True, serialize=False, validators=[django.core.validators.MaxValueValidator(8)])),
30
+ ('company_name', models.CharField(max_length=255)),
31
+ ('company_code', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='admin.company')),
32
+ ],
33
+ ),
20
34
  ```
21
35
  上記のモデルでマイグレートを行った結果、データベースには
22
36
  ```ここに言語を入力
@@ -27,7 +41,7 @@
27
41
  | company_id | bigint | NO | PRI | NULL | auto_increment |
28
42
  | company_name | varchar(255) | NO | | NULL | |
29
43
  | company_code_id | bigint | YES | MUL | NULL | |
30
- | company_code_id | bigint | YES | MUL | NULL | |
44
+ | staff_code_id | bigint | YES | MUL | NULL | |
31
45
  +----------------------+--------------+------+-----+---------+----------------+
32
46
  4 rows in set (0.02 sec)
33
47
  ```
@@ -35,7 +49,14 @@
35
49
  外部キーでも同じカラムがあると、一方のカラムは消されてしまうのでしょうか?
36
50
  そもそも同じカラム名にすんなよっていうのはわかるのですが、こちら気になったためご質問させて頂きました。よろしくお願い致します。
37
51
 
38
- こちらで回答が得られないかと思い、stackoverflowサイトへ同じ内容を記載しております。
39
- https://ja.stackoverflow.com/questions/88153
52
+ またご指摘頂いて、migrationファイル記載するために確認するとcompany_code(IntegerField)とstaff_codeがありませんでした。staff_codeは、マイグレーションファイルにはありませんが、マイグレートすると、MySQLにstaff_code_id として反映されておりました。
40
53
 
54
+ 解決策として、
55
+ https://teratail.com/questions/218930
56
+ こちらの記事より、db_column='main_id'を指定することで、Djangoが勝手に外部キーのカラムにidをつけなくなると見たので、外部キーに関してはカラム名を「company_code_id」「staff_code_id」にしようかと思っております。
41
57
 
58
+ 話がずれましたが、
59
+ >MySQLを見てみると、company_code というカラムがありませんでした。
60
+ >外部キーでも同じカラムがあると、一方のカラムは消されてしまうのでしょうか?
61
+ こちらお願い致します。
62
+

1

規約違反していたため修正

2022/04/04 00:35

投稿

nika_nika
nika_nika

スコア38

test CHANGED
File without changes
test CHANGED
@@ -35,3 +35,7 @@
35
35
  外部キーでも同じカラムがあると、一方のカラムは消されてしまうのでしょうか?
36
36
  そもそも同じカラム名にすんなよっていうのはわかるのですが、こちら気になったためご質問させて頂きました。よろしくお願い致します。
37
37
 
38
+ こちらで回答が得られないかと思い、stackoverflowサイトへ同じ内容を記載しております。
39
+ https://ja.stackoverflow.com/questions/88153
40
+
41
+