Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模型:创建模型条目的变体,并与原始条目进行比较_Python_Django_Django Models - Fatal编程技术网

Python Django模型:创建模型条目的变体,并与原始条目进行比较

Python Django模型:创建模型条目的变体,并与原始条目进行比较,python,django,django-models,Python,Django,Django Models,我正在尝试构建一个Django应用程序,允许用户对网站进行爬网,收集所述网站的所有内部链接,然后用户可以在此列表上创建许多变体,并对这些链接进行更改,以模拟不同的网站架构(例如,删除一些链接,添加链接等)。我需要保留原始链接列表,然后能够将其与每个变体进行比较,以显示差异(即+50%已删除链接,-10%页脚链接,等等) 我不确定在这种情况下理想的模型结构是什么。我已经创建了模型来保存用户进行的每次爬网,并创建了模型来存储爬网链接: models.py # Django from django.d

我正在尝试构建一个Django应用程序,允许用户对网站进行爬网,收集所述网站的所有内部链接,然后用户可以在此列表上创建许多变体,并对这些链接进行更改,以模拟不同的网站架构(例如,删除一些链接,添加链接等)。我需要保留原始链接列表,然后能够将其与每个变体进行比较,以显示差异(即+50%已删除链接,-10%页脚链接,等等)

我不确定在这种情况下理想的模型结构是什么。我已经创建了模型来保存用户进行的每次爬网,并创建了模型来存储爬网链接:

models.py

# Django
from django.db import models
from django.urls import reverse
from django.utils.timezone import now

# Owner
from apps.project.models import Project, Experiment

CRAWL_STATUS = {(1, "Running"), (2, "Paused"), (3, "Finished")}


# Custom model managers
class CrawlManager(models.Manager):
    def new_crawl(self, exp_id, status):
        # get experiment instance
        experiment = Experiment.objects.get(id=exp_id)
        # save new crawl in DB
        crawl = self.create(experiment=experiment, status=status)
        return crawl


class CrawledLinksManager(models.Manager):
    def new_link(self, crawl, source_url, target_url, nofollow):
        link = self.create(
            crawl=crawl, source_url=source_url, target_url=target_url, nofollow=nofollow
        )
        return link


# Models
class CrawlSettings(models.Model):
    experiment = models.OneToOneField(Experiment, on_delete=models.CASCADE)
    start_url = models.URLField()
    respect_robots = models.BooleanField(default=True)
    url_limit = models.IntegerField(null=True, blank=True)

    def get_absolute_url(self):
        return reverse("experiment_list", kwargs={"pk": self.experiment.project.id})


class Crawl(models.Model):
    experiment = models.OneToOneField(Experiment, on_delete=models.CASCADE, related_name="related_crawl")
    crawl_started = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=CRAWL_STATUS)

    objects = CrawlManager()

    def __str__(self):
        return str(self.pk)


class CrawledLinks(models.Model):
    crawl = models.ForeignKey(Crawl, on_delete=models.CASCADE)
    source_url = models.URLField()
    target_url = models.URLField()
    nofollow = models.BooleanField()

    objects = CrawledLinksManager()
现在我最大的问题是,如何管理链接中的变体/更改?我想为每个变体复制爬网链接条目,但我想这会影响性能/不理想

你对我如何管理这个用例有什么建议吗?如何在初始链接列表中存储变体,然后将此变体与原始变体进行比较