#python #python-3.x #django
Вопрос:
Я в некотором роде новичок в Django и в настоящее время борюсь с определенным его аспектом. В моем проекте я хочу, чтобы все пользователи имели доступ к определенным Job
сайтам, добавленным администратором, и отображались на интерфейсе. Однако у каждого Job
есть поле под названием userStatus
, которое пользователь должен иметь возможность редактировать. Однако это поле не должно изменяться для других пользователей. В настоящее время я создал модель userStatus
и создал поле внешнего ключа для ссылки на a Job
. Затем userStatus
имеет User
поле внешнего ключа.
class Job(models.Model):
name = models.CharField(max_length=200, help_text='Enter the Spring/Internship')
course = models.ForeignKey('Course', on_delete=models.RESTRICT,null=True)
company = models.ForeignKey('Company', on_delete=models.RESTRICT,default='N/A')
deadline = models.DateField(null=True, blank=True)
userStatus = models.ForeignKey('userStatus', on_delete=models.RESTRICT, null=True, blank=True)
class userStatus(models.Model):
user = models.ForeignKey(User, on_delete=models.RESTRICT)
USER_STATUS = (
('n', 'Not Applied'),
('a', 'Applied'),
('i', 'Got Interview'),
('o', 'Got Offer'),
('r', 'Rejected'),
)
stage = models.CharField(
primary_key=True,
max_length=1,
choices=USER_STATUS,
blank=False,
default='c',
help_text='What is the current stage of the process',
)
Пользователь не должен иметь возможности редактировать какое-либо поле, кроме userStatus
того, которое должно принадлежать только ему. Кортеж USER_STATUS
должен быть единственным вариантом для этой модели, и каждый Job
должен иметь доступ к этим 5 вариантам. В контексте:
Одна работа может называться «Стажировка в Google», один пользователь может «Пройти собеседование» на эту работу, но другой пользователь «Не подал заявку». Этот второй пользователь может подать заявку и хочет изменить свой статус на «Подано». Если они это сделают, это не должно повлиять на статус первого пользователя «Получил интервью».
Я чувствую, что мой подход совершенно неправильный, поэтому, пожалуйста, дайте мне знать, каким и каким должен быть мой подход.
Ответ №1:
Вы определили userStatus
в Job
модели, поэтому у одного конкретного Job
может быть ноль или один userStatus
, а у одного userStatus
может быть много Jobs
.
Связь между этими двумя моделями должна работать в противоположном направлении.
Таким образом, код должен быть следующим:
class Job(models.Model):
name = models.CharField(max_length=200, help_text='Enter the Spring/Internship')
course = models.ForeignKey('Course', on_delete=models.RESTRICT,null=True)
company = models.ForeignKey('Company', on_delete=models.RESTRICT,default='N/A')
deadline = models.DateField(null=True, blank=True)
class UserStatus(models.Model):
user = models.ForeignKey(User, on_delete=models.RESTRICT)
job = models.ForeignKey(Job, on_delete=models.RESTRICT)
USER_STATUS = (
('n', 'Not Applied'),
('a', 'Applied'),
('i', 'Got Interview'),
('o', 'Got Offer'),
('r', 'Rejected'),
)
stage = models.CharField(
primary_key=True,
max_length=1,
choices=USER_STATUS,
blank=False,
default='c',
help_text='What is the current stage of the process',
)
Что можно и что нельзя редактировать, должно быть определено в представлениях и сериализаторах.