Django错误:唯一约束失败:刮取空缺。标题如何修复?

2024-09-29 06:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

问题!我的脚本工作了一次,然后产生了这样一个错误

IntegrityError at /index/
UNIQUE constraint failed: scraping_vacancy.title
Request Method: GET
Request URL:    http://127.0.0.1:8000/index/
Django Version: 3.0.5
Exception Type: IntegrityError
Exception Value:    
UNIQUE constraint failed: scraping_vacancy.title
Exception Location: /Users/dmitrigornakov/Documents/Django/parser/venv/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py in execute, line 396
Python Executable:  /Users/dmitrigornakov/Documents/Django/parser/venv/bin/python
Python Version: 3.8.2

代码源:https://github.com/visualGravitySense/parser

views.py文件中的代码:

from django.shortcuts import render
from scraping.utils import *
from scraping.models import *

def home(request):

    jobs = djinni()
    city = City.objects.get(name='Kyiv')
    speciality = Speciality.objects.get(name='Python')
    v = Vacancy.objects.filter(city=city, speciality=speciality).values('url')
    url_list = [i['url'] for i in v]
    for job in jobs:
        if job['href'] not in url_list:
            vacancy = Vacancy(city=city, speciality=speciality, url=job['href'], title=job['title'], description=job['descript'], company=job['company'])
            vacancy.save()

    return render(request, 'base.html', {'jobs': jobs})

Tags: djangoinfromimportparserurlcityobjects
1条回答
网友
1楼 · 发布于 2024-09-29 06:23:09

如果不需要标题的唯一约束,请在刮取文件夹中的models.py中将其删除:

class Vacancy(models.Model):
    url = models.CharField(max_length=250, unique=True,  verbose_name='Адрес вакансии')
    title = models.CharField(max_length=250,  verbose_name='Заголовок вакансии')
   description = models.TextField(blank=True, verbose_name='Описание вакансии')
   company = models.TextField(max_length=250, blank=True, verbose_name='Название компании')
   city = models.ForeignKey(City, verbose_name='Город', on_delete=models.CASCADE)
   speciality = models.ForeignKey(Speciality, verbose_name='Специальность', on_delete=models.CASCADE)
   timestamp = models.DateField(auto_now_add=True)

更改后,不要忘记执行python manage.py makemigrations

python manage.py migrate scraping 00XX之后(其中00XX是make migrations提供的迁移数)

相关问题 更多 >