0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Django】makemigrations しようとしたら query が clash したよというエラーが出た【Python】

Posted at

【Django】makemigrations しようとしたら clash したよというエラーが出た

原因究明できてないけど一応回避はできたのでメモ

試行錯誤しながら model を作成していて、 makemigrations しようとしたら、↓のようなエラーが。

ERRORS:
users.User.foo: (fields.E303) Reverse query name for 'users.User.foo' clashes with field name 'main.Bar.user'.
        HINT: Rename field 'main.Bar.user', or add/change a related_name argument to the definition for field 'users.User.foo'.

何かしらでDBに不整合が起こって参照できなくなっているみたい・・・?

この時点でのUserモデルとmain.Barモデルはこちら(実際のものと少し内容変えてます フィールド名など)

users/models.py
class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField("email", unique=True)
    username = models.CharField("username", unique=True, max_length=40)
    foo = models.ManyToManyField(Monster, blank=True)
    is_staff = models.BooleanField("is_staff", default=False)
    is_active = models.BooleanField("is_active", default=True)
    date_joined = models.DateTimeField("date_joined", default=timezone.now)

    objects = UserManager()

    USERNAME_FIELD = "username"
    EMAIL_FIELD = "email"
    REQUIRED_FIELDS = ["email"]

    class Meta:
        verbose_name = "user"
        verbose_name_plural = "users"
main/models.py
class Bar(models.Model):
    ... 
    user = models.ForeignKey('users.User', on_delete=models.PROTECT)
    image = models.ImageField(upload_to='image')
    ...

解決策

言われている通り、main.Barクラスのフィールド名を user → owner にしてみた。

main/models.py
class Bar(models.Model):
    ... 
    owner = models.ForeignKey('users.User', on_delete=models.PROTECT)
    image = models.ImageField(upload_to='image')
    ...

このあとmakemigrations するとうまくいった

$ python manage.py makemigrations
Did you rename monster.user to monster.owner (a ForeignKey)? [y/N] y # ←yes
Migrations for 'main':
  main/migrations/0003_auto_20211221_2131.py
    - Rename field user on monster to owner
    - Remove field user from record
Migrations for 'users':
  users/migrations/0002_user_set_mon.py
    - Add field set_mon to user

考察

おそらく、試行錯誤の段階でちょこまかmakemigrations実行したせいでDBがおかしくなった・・・?
user っていうフィールドが使用済みになって使えなくなっているような感じ
↑因果関係が全くつかめてないので憶測でしかない

ただのフィールド名被りならかぶってる元のやつの名前変えても解決しそうだが、、、
かぶり元がどこかわからん

ちょっとよくわからないので今日は寝ます。
鼻水止まらん。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?