limit_choices_to в модели Джанго

У меня есть модель проекта. Этот проект содержит людей (тех, кто работает над проектом). Я также пытаюсь сделать модель для каждого сотрудника проекта, включая любые заметки, которые они имеют по проекту, и% выполнения по проекту.

Моя проблема заключается в том, что я хочу отфильтровать индивидуальный_персональный_проект только для лиц в соответствующем проекте. Я пытаюсь использовать

limit_choices_to = {'person_in_project':User}

Я хочу ограничить свой выбор пользователями, которые являются людьми в моей модели проекта.

class Project(models.Model):
    project_name = models.CharField(max_length = 120,null = False,blank = False)
    project_percent_complete = models.IntegerField(blank = True,null = True, default = 0)
    person_in_project = models.ManyToManyField(User,related_name = 'project_person',blank = True)
    project_description = models.CharField(max_length = 300,null = True,blank = True)

class Project_Person(models.Model):
    corresponding_project = models.ForeignKey(Project,related_name = 'corresponding_project_this_user_is_in',null = False)
    individual_person_in_project = models.ForeignKey(User, related_name = 'a_person_within_the_corresponding_project', limit_choices_to = {'person_in_project':User})
    percent_complete = models.IntegerField(default = 0)

2 ответа

Решение

Я оставил комментарий выше, но я думаю, что это лучший ответ, так или иначе:

Вы можете использовать опцию through, чтобы отслеживать дополнительную информацию о поле manytomany, поэтому вы получите:

class Project(models.Model):
    ...
    person_in_project = models.ManyToManyField(User, related_name='project_person', blank=True, through=ProjectPerson)

Документы объясняют остальные детали, но вам не нужно обрабатывать limit_choices_to в этом случае.

Спасибо за вашу помощь, это было очень полезно. Самым полезным комментарием был ryanmrubin и использование сквозного с ManyToManyField для облегчения их отношений. Я закончил тем, что создал отдельный класс и связал его с проектом.

Если мне нужно связать больше информации с этим новым классом, я, безусловно, буду использовать его с ManyToManyField.

class Project(models.Model):
    project_name = models.CharField(max_length = 120,null = False,blank = False)
    project_percent_complete = models.IntegerField(blank = True,null = True, default = 0)
    project_description = models.CharField(max_length = 300,null = True,blank = True)
    people_in_project = models.ManyToManyField(User,blank = True)

class Project_Tasks(models.Model):
    description = models.CharField(max_length = 120,blank = True)
    percent_complete = models.IntegerField(default = 0)
    user = models.OneToOneField(User,unique = True,blank = True, null = True)
    project = models.OneToOneField(Project,unique = True, blank = False, null = True)
Другие вопросы по тегам