【发布时间】:2020-03-30 14:53:04
【问题描述】:
我在使用 Django 时遇到了问题,特别是在使用 DoesNotExist 时遇到了问题。
在我的脚本中,我正在尝试检查“Scraper”对象是否存在,如果不存在,则创建对象。
为了检查它是否存在,我正在使用带有两个参数的“try catch Model.DoesNotExists”,.get(),第一个是 ID,最后一个是用户对象。
当两个 Scraper 对象具有相同的 ID 但用户的 ID 不同时,问题就出现了,第一个“Scraper”被创建,第二个擦除第一个。
try:
a = Scraper.objects.get(id_lbc=ids, user=user)
except Scraper.DoesNotExist:
a = Scraper(
id_lbc=ids,
lbc_name=title,
lbc_url=url,
lbc_image=image,
lbc_price=price,
lbc_date=date,
lbc_city=city,
lbc_price_meter=price_meter,
user=user,
token_url=token,
customer=customer,
has_phone=phone,
)
a.save()
型号
class Scraper(models.Model):
id_lbc = models.IntegerField(primary_key=True)
lbc_name = models.CharField(max_length=300)
lbc_url = models.URLField(max_length=300)
lbc_image = models.URLField(
max_length=300, default='http://****/****/nothing.jpg')
lbc_price = models.IntegerField(blank=True, null=True)
lbc_price_meter = models.IntegerField(blank=True, null=True)
lbc_city = models.CharField(max_length=300)
lbc_date = models.DateTimeField(auto_now=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
token_url = models.ForeignKey(
Url_lbc, to_field='token', on_delete=models.CASCADE)
is_emailed = models.BooleanField(default=False)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
has_phone = models.BooleanField(default=False)
def __str__(self):
return self.lbc_name
我想要的是创建两个具有相同“id”但用户不同的 Scraper 对象 例如
刮板 N°1
ID = 1234567
用户 = Nico(对象)
刮板 N°2
ID = 1234567
用户 = 保罗(对象)
我认为在给定 User 对象的情况下,Django 查询可以看到两个 Scraper 对象之间的区别,但我误解了一些东西......也许是我模型中的 PK ?
感谢您的帮助
【问题讨论】:
-
仅供参考,它是 scraper(以及 scraping、scraped、scrape)而不是 scrapper。 “废弃”意味着像垃圾一样扔掉:-(
标签: python django postgresql django-models