Django.db.utils.OperationalError: нет такой колонки: blog_follow.followed_me_id

Я попробовал удалить файл миграции и python manage.py makemigrations [appname]. Однако это не решило мою проблему

models.py

class User(AbstractUser):
    followers = models.ManyToManyField("Follow",blank=True,related_name="follow_user")

class Post(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    post = models.CharField(max_length=500,null=True,blank=True)
    timestamp = models.DateField(auto_now_add=True)
    like = models.ManyToManyField(User,blank=True,related_name="liked_user")
    
    @property
    def number_of_likes(self):
        return self.like.all().count(),
    def __str__(self) -> str:
        return self.post



class Follow(models.Model):
    followed_me = models.ForeignKey(User, on_delete=models.CASCADE,related_name="followed_me", default=None)
    followed_by  = models.ForeignKey(User, on_delete=models.CASCADE, related_name="followed_by", default=None)

    def __str__(self) -> str:
        return f"{self.followed_by.username} start following {self.followed_me.username} "

views.py


def profile(request,username):
    my_account = get_object_or_404(User,username=username)
    my_post = Post.objects.filter(user=my_account).order_by("id")
 
    following = False
    
    if request.user.is_authenticated:
        followers = my_account.followers.filter(followed_by_id=request.user.id)
        if followers.exists():
            following = True
   


    return render(request,"blog/profile.html",{
        "posts":my_post,
     
        "post_count": my_post.count(),
    })


def follow(request,username):
    all_user = User.objects.all()
    my_account = get_object_or_404(User,username=username)
    my_post = Post.objects.filter(user=my_account).order_by("id")
 
    following = False
    
    if request.user.is_authenticated:
        followers = my_account.followers.filter(followed_by_id=request.user.id)
        if followers.exists():
            following = True
   

    return render(request,"blog/following.html",{
        "al_us": all_user,
        "following":following
    })


def follow_or_unfollow_user(request,user_id):

    followed = get_object_or_404(User,id=user_id)
    followed_by = get_object_or_404(User,id=request.user.id)

    follow,created =Follow.objects.get_or_create(followed_me=followed,followed_by=followed_by)

    if created:
        followed.followers.add(follow)

    else:
        followed.followers.remove(follow)
        follow.delete()
    return redirect('index')

urls.py

    path("profile/<str:username>",views.profile,name="profile"),
    path("follow/<str:username>",views.follow,name="follow"),
    path("follow_or_unfollow/<int:user_id>",views.follow_or_unfollow_user,name="follow_or_unfollow")

profile.html

<div>total Post {{post_count}} <span>total follower {{currently_followed}}</span> <span>total following {{following_count}}</span></div> 

{%for pst in posts%}

{%if user.id == pst.user.id%}
<div class="post-outer-container">
    <div class="post-container">
        {{pst.post}}
        {{pst.user}}
        {{pst.timestamp}}
        
        <a href="{%url 'edit-post' pst.id%}" style="margin-left:15px ;"> Edit</a>
        <a href="{%url 'delete' pst.id%}" style="margin-left:15px ;"> Delete</a>
       
    </div>
</div>
{%endif%}
{%endfor%}

{%endblock%}

following.html

<h1>All user</h1>

{%for i in al_us%}
{%if user.id != i.user.id%}
    <div>{{i}}</div>
    
        {% if following %}
        <a href="{% url 'follow_or_unfollow' i.id%}">Unfollow</a>
        
        {% else %}
        <a href="{% url 'follow_or_unfollow' i.id%}">Follow</a>
        {%endif%}


{%endif%}
{%endfor%}

Весь мой код здесь.

Я пытаюсь сделать систему следования/отслеживания пользователей. Список всех пользователей на одной странице. запрос.пользователь будет следовать или не следовать за другими пользователями, но у меня это не получилось. Моя ошибка такова:

Внутренняя ошибка сервера: /profile/b Traceback (последний последний вызов): File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
. return self.cursor.execute(sql, params) Файл "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\sqlite3\base.py", строка 477, in execute return Database.Cursor.execute(self, query, params) sqlite3.OperationalError: нет такой колонки: blog_follow.followed_by_id

Вышеуказанное исключение было непосредственной причиной следующего исключения:

Traceback (последний последний вызов): File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\exception.py", line 55, in inner response = get_response(request) Файл "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\base.py", строка 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) Файл "C:\Users\OSMAN MERT\Desktop\env\blogs\mysite\blog\views.py", строка 117, в profile if followers.exists(): File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\models\query.py", line 892, in exists
. return self.query.has_results(using=self.db) File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\models\sql\query.py", line 580, in has_results return compiler.has_results() Файл "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\models\sql\compiler.py", строка 1329, in has_results return bool(self.execute_sql(SINGLE)) Файл "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\models\sql\compiler.py", строка 1361, in execute_sql cursor.execute(sql, params) Файл "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\utils.py", строка 103, in execute
return super().execute(sql, params) File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\utils.py", line 67, in execute
return self._execute_with_wrappers( Файл "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\utils.py", строка 80, in _execute_with_wrappers return executor(sql, params, many, context) Файл "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\utils.py", строка 84, in _execute
. с self.db.wrap_database_errors: File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\utils.py", line 91, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
return self.cursor.execute(sql, params) Файл "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\sqlite3\base.py", строка 477, in execute return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: нет такой колонки: blog_follow.followed_by_id

Я думаю, что проблема в вашем запросе фильтра:

.filter(followed_by_id=request.user.id)

когда вы хотите фильтровать по столбцу связанной таблицы, вы должны поставить двойное подчеркивание перед именем столбца, как это:

.filter(followed_by__id=request.user.id)
Вернуться на верх