Ограничение выбора внешним ключом - PullRequest
0 голосов
/ 05 июля 2019

У меня есть модель с внешними ключами собственного отношения и внешним ключом, я хочу использовать limit_choices_to = self.parent = parent.Но это не работает, я пробовал разные вещи, но не могу заставить их работать

Я хочу ограничить выбор здесь

    next_level = models.ForeignKey('flow.State', 
                                    on_delete=models.CASCADE, 
                                    related_name='get_next_level', 
                                    blank=True, 
                                    null=True, 
                                    limit_choices_to=(Q(workflow_id=workflow)))

Вот моя целая модель

class State(models.Model):
    workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, null=True, blank=True)
    level = models.IntegerField()
    name = models.CharField(max_length=100)
    next_level = models.ForeignKey('flow.State', on_delete=models.CASCADE, related_name='get_next_level', blank=True, null=True, limit_choices_to=(Q(workflow_id=workflow)))
    return_level = models.ForeignKey('flow.State', on_delete=models.CASCADE, related_name='get_return_level', blank=True, null=True)
    approver = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)

1 Ответ

0 голосов
/ 05 июля 2019

Насколько я понимаю, у вас есть Workflow объект, и вы пытаетесь получить доступ к next_level. Вы можете просто передать параметр обратной связи related_name=get_state в поле workflow ForeignKey в вашей модели State. Делая это, вы можете получить доступ к следующему уровню Workflow модели, например:

for state in workflow.get_state.all():

    # Here you need to check the correct
    # state object to get the reverse relation
    if state.name == "My correct state":
        next_levels = state.get_next_level.all()

        for next_level in next_levels:
            # Here you need to check the correct
            # next_level object to get the reverse relation
            if next_level.name == "My correct next_level":
                print("This is the correct next_level: " + str(next_level))
                break

        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...