Ошибки Pylint в Django, Pylint(E0611:no-name-in-module) и Pylint(E1101:no-member)
Похоже, что мои models.py, forms.py, urls.py и views.py не распознают элементы друг в друге, и я не понимаю, что может идти не так. Я только начинаю проект (CS50W Project4-Network) и заметил проблему, когда попытался отобразить форму модели, а поле textarea формы, связанной с моделью, не отображается в браузере, оно отображается только при нажатии кнопки submit, как отсутствующее поле для заполнения, я не уверен, что это из-за тех же ошибок pylint, которые я получаю, или чего-то еще.
Вот мои модели:
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
pass
class Post(models.Model):
body = models.TextField()
date = models.DateTimeField(auto_now_add = True)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="author", default=None)
def __str__(self):
return f"{self.body} by {self.author} at {self.date}"
The forms.py:
from django import forms
from django.forms import ModelForm
from .models import Post
class PostForm(ModelForm):
class Meta:
model = Post
fields = ["body"]
widgets = {
"body": forms.Textarea(attrs={'class': 'form-control col-md-5 col-lg-6'}),
}
Взгляды
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.db import IntegrityError
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from .forms import PostForm
from .models import User, Post
**I left out logging in routes**
@login_required(login_url='login')
def create_post_page(request):
return render(request, "network/create_post.html")
def create_post(request):
posted = False
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.author = request.user
instance.save()
return HttpResponseRedirect("/create_post?posted=True")
else:
form = PostForm()
if "posted" in request.GET:
posted = True
return render(request, "network/create_post.html", {
"posted": posted,
"form": form
})
Урлы:
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout"),
path("register", views.register, name="register"),
path("create_post", views.create_post, name="create_post"),
path("create_post_page", views.create_post_page, name="create_post_page")
]
Код шаблона, где форма не отображается, отображается только когда я нажимаю submit как отсутствующее поле, которое должно быть полем
{% extends "network/layout.html" %}
{% block body %}
{% if posted %}
{% else %}
<h2>Create a new post</h2>
<form action="{% url 'create_post' %}" method = "POST">
{% csrf_token %}
{{ form.as_p }}
<input class="btn btn-secondary" type="submit" value="Post">
</form>
{% endif%}
{% endblock %}
Проблемы, которые vscode продолжает поднимать:
Отсутствует имя 'Post' в модуле 'network.models'Pylint(E0611:no-name-in-module)
Модуль 'network.views' не имеет члена 'create_post'Pylint(E1101:no-member)
Модуль 'network.views' не имеет члена 'create_post_page'Pylint(E1101:no-member)
Помогите мне пожалуйста, я чувствую, что это небольшая проблема, но она сводит меня с ума, потому что я не могу понять почему.
Убедитесь, что вы загружаете плагин "pylint_django" при вызове pylint и передаете ему правильное значение для django-settings-module
. Для этого создайте файл pylintrc
в папке вашего проекта и дайте ему следующее содержание:
[MAIN]
load-plugins = pylint_django,
django-settings-module = mysite.settings