-
Element
:
- Represents an HTML element.
- It has a
name
field, which is a character field with a maximum length of 200.
- Inherits from the
Timestamped
model (which is not shown here but probably contains timestamp fields like created_at
and updated_at
).
- Defines a custom string representation using the
__str__
method.
-
Domain
:
- Represents a domain.
- It has a
name
field, which is a character field with a maximum length of 200.
- Inherits from the
Timestamped
model.
- Defines a custom string representation using the
__str__
method.
-
Page
:
- Represents a web page.
- It has the following fields:
url
: a URL field with a maximum length of 2048 characters.
domain
: a foreign key to the Domain
model, indicating the domain to which the page belongs.
pages
: a many-to-many self-referential relationship to other Page
instances, allowing pages to have children.
response
: a text field for storing the page's content.
elements
: a many-to-many relationship with the Element
model through the PageElement
intermediary model.
- Inherits from the
Timestamped
model.
- Defines a custom string representation using the
__str__
method.
-
PageElement
:
- Serves as an intermediary model between
Page
and Element
to associate elements with pages and store additional information.
- It has the following fields:
page
: a foreign key to the Page
model.
element
: a foreign key to the Element
model.
value
: a text field for storing additional information related to the element on the page.
-
Attribute
:
- Represents attributes associated with an
Element
.
- It has the following fields:
element
: a foreign key to the Element
model, indicating the element to which the attribute belongs.
name
: a character field for the attribute name with a maximum length of 255 characters.
value
: a text field for storing the attribute's value.
- Inherits from the
Timestamped
model.
- Defines a custom string representation using the
__str__
method.
from django.db import models
# Create your models here.
class Timestamped(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Element(Timestamped):
name = models.CharField(max_length=200)
class Meta:
default_related_name = 'elements'
verbose_name = 'element'
verbose_name_plural = 'elements'
def __str__(self):
return self.name
class Domain(Timestamped):
name = models.CharField(max_length=200)
class Meta:
default_related_name = 'domains'
verbose_name = 'domain'
verbose_name_plural = 'domains'
def __str__(self):
return self.name
class Page(Timestamped):
url = models.URLField(max_length=2048)
domain = models.ForeignKey("Domain", on_delete=models.CASCADE)
pages = models.ManyToManyField("self",symmetrical=False,related_name='children')
response = models.TextField(null=True,blank=True)
elements = models.ManyToManyField("Element",through="PageElement")
class Meta:
default_related_name = 'pages'
verbose_name = 'page'
verbose_name_plural = 'page'
def __str__(self):
return self.url
class PageElement(Timestamped):
page = models.ForeignKey("Page", on_delete=models.CASCADE)
element = models.ForeignKey("Element", on_delete=models.CASCADE)
value = models.TextField(null=True,blank=True)
class Attribute(Timestamped):
element = models.ForeignKey("Element", on_delete=models.CASCADE)
name = models.CharField(max_length=255)
value = models.TextField(null=True,blank=True)
class Meta:
default_related_name = 'attributes'
verbose_name = 'attribute'
verbose_name_plural = 'attributes'
def __str__(self):
return self.name