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 способ обхода отношений модели.

Вернуться на верх