DJANGO ForeingKey выбор из справочной таблицы в зависимости от пользователя
Секция -> Комплексы -> Линия -> Оборудование -> Отчет
Мне нужно сделать так, чтобы при добавлении отчета в список оборудования попадал только тот раздел оборудования, к которому принадлежит пользователь и статус которого=true. Я только начал изучать Django. Подскажите, на что нужно обратить внимание, чтобы решить эту проблему.
`class Section(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, ...)
name = models.CharField(max_length=30, blank=True, ...)
def __str__(self):
return self.name
class Complexes(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, ...)
name = models.CharField(max_length=30, blank=True, ...)
section = models.ForeignKey(Section, on_delete=models.SET_NULL, ...)
def __str__(self):
return self.section.__str__()+" "+self.name
class Line(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, ...)
name = models.CharField(max_length=30, blank=True, ...)
complexes = models.ForeignKey(Complexes, on_delete=models.SET_NULL, ...)
def __str__(self):
return self.complexes.__str__()+" "+self.name
class Equipment(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, ...)
name = models.CharField(max_length=30, blank=True, ...)
line = models.ForeignKey(Line, on_delete=models.SET_NULL, ...)
status = models.BooleanField(default=True, ...)
...
def __str__(self):
return self.name +" "+ self.explanation +" "+ self.line.__str__()
class Report(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, ...)
equipment = models.ForeignKey(Equipment, on_delete=models.DO_NOTHING, ...)
...`
В игре участвуют два компонента - база данных и сайт, с которым взаимодействует пользователь. Модель определяет базу данных, но она не должна определять ничего о сайте. Но ваш вопрос сформулирован таким образом, что вы спрашиваете, что можно сделать с моделями, чтобы изменить то, что происходит на сайте, - это, вообще говоря, ошибка категории.
Если вы пытаетесь изменить то, что видно пользователю, то ваша функциональность выбора нужного набора Equipment
находится в view.
Предполагая, что user.section
является отношением от User
к Section
, ваш выбор элементов в представлении может выглядеть следующим образом:
user = request.user
queryset = Equipment.objects.filter(
status=True,
line__complex__section=user.section
)
Если вас смущает синтаксис в последней строке, то это просто принятый в Django способ обхода отношений модели.