С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
3 / 1 / 1
Регистрация: 13.10.2013
Сообщений: 31

NOT NULL constraint failed

14.02.2021, 12:53. Показов 1621. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте. Встал вопрос, при попытки сохранить в БД. Выдает ошибку
NOT NULL constraint failed: scrapping_vacancy.language_id
Подскажите пож-та, как исправить ее?

Модель

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from django.db import models
from scrapping.utilis import from_cyrillic_to_eng
 
 
# Create your models here.
 
 
class City(models.Model):
    name = models.CharField(max_length=50, verbose_name='Название населенного пункта')
    slug = models.CharField(max_length=50, blank=True, unique=True)
 
    class Meta:
        verbose_name = 'Название населенного пункта'
        verbose_name_plural = 'Название населеных пунктов'
 
    def __str__(self):
        return self.name
 
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = from_cyrillic_to_eng(self.name)
        super().save(*args, **kwargs)
 
 
class Language(models.Model):
    name = models.CharField(max_length=50, verbose_name='Язык программирования')
    slug = models.CharField(max_length=50, blank=True, unique=True)
 
    class Meta:
        verbose_name = 'Язык программирования'
        verbose_name_plural = 'Языки программирования'
 
    def __str__(self):
        return self.name
 
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = from_cyrillic_to_eng(str(self.name))
        super().save(*args, **kwargs)
 
 
class Vacancy(models.Model):
    url = models.URLField(unique=True)
    title = models.CharField(max_length=250, verbose_name='Заголовок вакансии')
    company = models.CharField(max_length=250, verbose_name='Компания')
    description = models.TextField(verbose_name='Описание вакансии',null=True)
    city = models.ForeignKey('City', on_delete=models.CASCADE,
                             verbose_name='Город', related_name='vacancies')
    language = models.ForeignKey('Language', on_delete=models.CASCADE,
                                 verbose_name='Язык программирования')
    timestamp = models.DateField(auto_now_add=True)
 
    class Meta:
        verbose_name = 'Вакансия'
        verbose_name_plural = 'Вакансии'
 
    def __str__(self):
        return self.title
Файл из которого беру функции для парсинга

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import requests
from random import choice
from bs4 import BeautifulSoup
 
__all__ = ('extract_max_page_hh', 'extract_hh', 'extract_max_page_stack', 'extract_stackoverflow')
 
 
def random_headers():
    headers = [
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14',
        'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
        'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0']
 
    return {'User-Agent': choice(headers),
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}
 
 
def extract_max_page_hh():
    url = 'https://hh.ru/search/vacancy?L_is_autosearch=false&clusters=true&enable_snippets=true&items_on_page=100&no_magic=true&text=python&'
    hh_request = requests.get(url, headers=random_headers())
    hh_soup = BeautifulSoup(hh_request.text, 'lxml')
    pages = []
    paginator = hh_soup.find_all('span', {'class': 'pager-item-not-in-short-range'})
    for page in paginator:
        pages.append(int(page.find('a').text))
 
    return pages[-1]
 
 
def extract_hh(url):
    jobs = []
    numbers = extract_max_page_hh()
    for page in range(int(numbers)):
        # url = 'https://hh.ru/search/vacancy?L_is_autosearch=false&area=113&clusters=true&enable_snippets=true&text=python&page='
        hh_request = requests.get(f'{url}page={page}', headers=random_headers())
        soup = BeautifulSoup(hh_request.text, 'lxml')
        results = soup.find_all('div', {'class': 'vacancy-serp-item'})
        for result in results:
            title = result.find('a').text
            link = result.find('a')['href']
            company = result.find('div', {'class': "vacancy-serp-item__meta-info-company"}).find('a').text
            company = company.strip()
            content = result.find('div', {'class': 'g-user-content'}).text
 
            jobs.append({'title': title, 'description': content, 'company': company, 'url': link})
    return jobs
 
 
def extract_max_page_stack():
    url = 'https://stackoverflow.com/jobs?q=python'
    request = requests.get(url, headers=random_headers())
    soup = BeautifulSoup(request.text, 'lxml')
    pages = soup.find('div', {'class': 's-pagination'}).find_all('a')
    last_page = pages[-2].get_text(strip=True)
    return last_page
 
 
def extract_stackoverflow(url):
    jobs = []
    numbers = extract_max_page_stack()
    for number in range(int(numbers)):
        # url = 'https://stackoverflow.com/jobs?q=python'
        request = requests.get(f'{url}&pg={number + 1}', headers=random_headers())
        soup = BeautifulSoup(request.text, 'lxml')
        results = soup.find_all('div', {'class': 'grid--cell fl1'})
        for result in results:
            title = result.find('h2', {'class': 'mb4 fc-black-800 fs-body3'}).find('a').text
            company = result.find('h3', {'class': 'fc-black-700 fs-body1 mb4'}).find('span').text
            href = result.find('h2', {'class': 'mb4 fc-black-800 fs-body3'}).find('a').get('href')
            link = f'https://stackoverflow.com{href}/'
            jobs.append({'title': title, 'description': '', 'company': company, 'url': link})
    return jobs
Файл из которого запускаю.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import os
import sys
 
proj = os.path.dirname(os.path.abspath('manage.py'))
sys.path.append('proj')
os.environ['DJANGO_SETTINGS_MODULE'] = 'scrapping_service2.settings'
 
import django
 
django.setup()
 
from scrapping.hh import *
from scrapping.models import Vacancy, City, Language
from django.db import DatabaseError
 
city = City.objects.filter(slug='kiev').first()
language = Language.objects.filter(slug='python').first()
 
parsers = (
    (extract_hh,
     'https://hh.ru/search/vacancy?L_is_autosearch=false&area=113&clusters=true&enable_snippets=true&text=python&page='),
    (extract_stackoverflow, 'https://stackoverflow.com/jobs?q=python')
)
jobs = []
 
for func, url in parsers:
    j = func(url)
    jobs += j
 
for job in jobs:
    v = Vacancy(**job,city=city,language=language)
    try:
        v.save()
    except DatabaseError as e:
         print(e)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2021, 12:53
Ответы с готовыми решениями:

Ошибка «NOT NULL constraint failed: mainapp_cartproduct.user_id»?
Всем привет! После того как добавил на сайт регистрацию стала появляться ошибка при добавлении товара в корзину IntegrityError at...

Null value in column "user_id" violates not-null constraint save()
Хочу сделать импорт данных из файла Excel. все данные берутся нормально но он выдает ошибку, сам файл в котором лежит код вызывается по...

UNIQUE constraint failed: account_user.username
Здравствуйте, с медиа файлами я только начал работать, так что извиняюсь за глупый вопрос. Если авторизоваться и зайти на страницу...

1
3 / 1 / 1
Регистрация: 13.10.2013
Сообщений: 31
14.02.2021, 20:57  [ТС]
В вопросе разобрался, тему можно закрывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.02.2021, 20:57
Помогаю со студенческими работами здесь

Работа со "slug" (ошибка "UNIQUE constraint failed")
У меня в модели определено поле slug: slug = models.SlugField(max_length=100, verbose_name='URL', unique=True) Я пытаюсь сделать...

NOT NULL constraint failed откуда ошибка?
Всем привет! class Profile(AbstractUser): #user = models.OneToOneField(User, on_delete=models.CASCADE) Family =...

Ошибка sqlite: NOT NULL constraint failed
В учебных целях передо мной стояла такая задача:Сделать возможность добавлять пост в БД и коммент для каждого поста. Выводить все через...

Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'fk_p_orders_p_stores1' in the
Всем привет, помогите пожалуйста решить проблему. При создании бд вылазит ошибка - Error Code: 1822. Failed to add the foreign key...

Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'Object' in the referenced tabl
ошибка в возникающая в MySQL Workbench см.скрин (вероятно то, чего касается ошибка).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru