Django在定义ForeignKey的时候有时会报错
(fields.E304) Reverse accessor
class FriendList(models.Model):
username = models.ForeignKey(User, on_delete=models.CASCADE)
friend = models.ForeignKey(User, blank=True, on_delete=models.CASCADE)
之所以报错是因为, Django在定义ForeignKey约束时, 不仅仅会约束FriendList中的username和friend. 同时Django也会试图建立User到FriendList的backforwards relation.
即, 定义过ForeignKey后, Django会试图创建一个User.FriendList的API. 但由于FriendList中有两个Field都设置User为外键, User.FriendList就不知该返回username还是friend.
解决方法有:
-
指定related_name,
class FriendList(models.Model): username = models.ForeignKey(User, related_name='FriendList_username', on_delete=models.CASCADE) friend = models.ForeignKey(User, blank=True, related_name='FriendList_friend', on_delete=models.CASCADE)
-
取消backforwards relation
class FriendList(models.Model): username = models.ForeignKey(User, related_name='+', on_delete=models.CASCADE) friend = models.ForeignKey(User, blank=True, related_name='+', on_delete=models.CASCADE)