Verständnisfrage models.py
Verfasst: Dienstag 19. November 2024, 15:19
Hallo zusammen,
ich habe eine Verständnisfrage zur models.py. Meine Datei sieht wie folgt aus.
Ein Problem z.B. hängt an einer bestimmten Responsibility. Genau wie eine Solution zu einem bestimmten Problem gehört. Ich habe jetzt ja nur den PK aus dem "Parent" Model mitgezogen. Die Beziehungen kann ich so also zumindest herstellen. Macht man das so bzw. reicht das so? Oder kann ich auf diese Weise später keine richtigen Filter etc. nutzen? Vorher hatte ich immer die FK aus allen involvierten Modellen mitgezogen. Ich hoffe man versteht was ich meine.
Ich würde das Model gerne von Anfang an korrekt aufbauen um nicht später wieder die Hälfte umstellen zu müssen.
Viele Grüße
gospat
ich habe eine Verständnisfrage zur models.py. Meine Datei sieht wie folgt aus.
Code: Alles auswählen
from django.db import models
class Project(models.Model):
name = models.CharField(max_length=100, blank=True, null=True, unique=True)
cost_bearer = models.CharField(max_length=6, blank=False, null=False, unique=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return f'{self.cost_bearer} {self.name}'
class System(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
number = models.CharField(max_length=4, blank=False, null=False)
name = models.CharField(max_length=100, blank=True, null=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
constraints = [
models.UniqueConstraint(fields=['project', 'number'], name='unique_system')
]
def __str__(self):
return f'{self.number} {self.name}'
class Department(models.Model):
name = models.CharField(max_length=10, blank=False, null=False, unique=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class Employee(models.Model):
department = models.ManyToManyField(Department)
name = models.CharField(max_length=100, blank=False, null=False, unique=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class Responsibility(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE, blank=False, null=False)
system = models.ForeignKey(System, on_delete=models.CASCADE, blank=False, null=False)
department = models.ForeignKey(Department, on_delete=models.SET_NULL, blank=False, null=True)
employee = models.ForeignKey(Employee, on_delete=models.SET_NULL, blank=False, null=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
constraints = [
models.UniqueConstraint(fields=['project', 'system', 'department', 'employee'], name='unique_responsibility')
]
def __str__(self):
return f'{self.project} | {self.system} | {self.department} | {self.employee}'
class Problem(models.Model):
responsibility = models.ForeignKey(Responsibility, on_delete=models.CASCADE, blank=False, null=False)
description = models.TextField(max_length=2000, blank=True, null=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return f'{self.responsibility} | {self.description}'
class Solution(models.Model):
problem = models.ForeignKey(Problem, on_delete=models.CASCADE, blank=False, null=False)
description = models.TextField(max_length=2000, blank=True, null=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.description
class Status(models.Model):
responsibility = models.OneToOneField(Responsibility, on_delete=models.CASCADE, blank=False, null=False)
COLORS = (
('0', 'Rot'),
('1', 'Gelb'),
('2', 'Grün'),
)
traffic_light = models.CharField(max_length=4, choices=COLORS, blank=False, null=False, default='Grün')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.traffic_light
Ich würde das Model gerne von Anfang an korrekt aufbauen um nicht später wieder die Hälfte umstellen zu müssen.
Viele Grüße
gospat