Я сильно запутался в использовании отношений в моделях.
У меня есть база данных, которая содержит данные (см. Изображение)
Образ организации базы данных
У меня много полей.
К каждому полю прикреплен какой-либо элемент (лунки).
Каждая лунка уникальна и если выделена одному полю.
Лунка иметь много данных для каждого элемента (Info, Petro, Geo и Tests)
Все данные привязаны к сервису, который может добавлять и изменять.
Каждый сервис может управлять одними данными.
У каждой службы есть менеджер и несколько пользователей.
Я написал код, но не знаю, когда использую типы отношений. как ForeignKey, ManyToManyField ......
Мой код:
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
from django.urls import reverse
# Create your models here.
class Fields(models.Model):
Fieldname = models.CharField(max_length=15)
DiscoveredDate= models.DateField(max_length=4) #YYYY
Mechanisms = models.CharField(max_length=15)#
OBSERVATION = models.TextField()
post_date = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self):
return self.Fieldname
def get_absolute_url(self):
return reverse('Fields', args=[self.pk])
class Meta:
ordering=('-post_date',)
class Wells(models.Model):
WellID = models.ManyToManyField(max_length=15,related_name='Fields') # or I use ForeignKey
TYPE = models.CharField(max_length=35)
Startdate = models.DateField(max_length=35) # date with format mm-dd-YY
EndDate = models.DateField(max_length=15) # date with format mm-dd-YY
Duration = models.IntegerField(max_length=4) # enteger
supervisor = models.CharField(max_length=30)
OBSERVATION = models.TextField()
post_date = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self):
return self.WellID
def get_absolute_url(self):
return reverse('Events', args=[self.pk])
class Meta:
ordering=('-post_date',)
class Info(models.Model):
WellID = models.ForeignKey(User)
WelX = models.CharField(max_length=15)
WelY = models.CharField(max_length=15)
Nature = models.CharField(max_length=15)
Perimetre = models.CharField(max_length=15)
def __str__(self):
return self.WellID
def get_absolute_url(self):
return reverse('Infos', args=[self.pk])
class Meta:
ordering=('-post_date',)
class Geo(models.Model):
WellID =models.ForeignKey(User)
Reservoire= models.CharField(max_length=15)
Centre = models.CharField(max_length=15)
DSTinv = models.CharField(max_length=15)
DSTcomt = models.TextField()
class Petro(models.Model):
WellID = models.ForeignKey(User)
TOIT = models.CharField(max_length=10)
MUR = models.CharField(max_length=10)
post_date = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self):
return self.WellID
def get_absolute_url(self):
return reverse('WellDt', args=[self.pk])
class Meta:
ordering = ('-post_date',)
class Tests(models.Model):
WellID = models.ForeignKey(User)
Test1 = models.IntegerField(max_length=10)
Test2 = models.IntegerField(max_length=10)
Test3 = models.IntegerField(max_length=10)
Test_date = models.DateField(max_length=10)
post_date = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self):
return self.WellID
def get_absolute_url(self):
return reverse('WellDt', args=[self.pk])
class Meta:
ordering = ('-post_date',)