Задать вопрос
@Screpka

Как передать созданную запись на редактирование другому пользователю?

Только начал изучать django, сразу после изучения python, который пару месяцев изучаю. Так что, пожалуйста, будьте снисходительны) Решил сделать "проектик" для работы, чтобы интересней было изучать эту библиотеку.

Есть "Отчет" который создает пользователь.
Модели автора отчета и сама модель отчета.
Код

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
import uuid
from datetime import date

class Author(models.Model):
    """
    Модель представляющая автора.
    """
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

    class Meta:
        verbose_name = 'Пользователь'
        verbose_name_plural = 'Пользователи'

    POSITION = [
        ("Operator", "Оператор"),
        ("Admin", "Администратор"),
        ("Engineer", "Ведущий инженер"),
    ]
    post = models.CharField("Должность", max_length=10, choices=POSITION, blank=True, default='Operator')

    def get_absolute_url(self):
        """
        Возвращает url для доступа к определенному экземпляру автора.
        """
        return reverse('user-detail', args=[str(self.id)])


    def __str__(self):
        """
        Строка представляющая модель объекта.
        """
        return '{0} {1}'.format (self.last_name, self.first_name)


Код

class Note(models.Model):
    """
    Модель для представления формы отчета
    """
    title = models.CharField("Заголовок", max_length=100)
    user = models.ForeignKey('Author', on_delete=models.SET_NULL, null=True, verbose_name='Ответственный')
    date = models.DateField("Дата создания",null=True, blank=True)
    textarea = models.TextField("Поле для отчета", max_length=1000)

    tags = models.ManyToManyField(Tags, help_text="Выберите тэг", blank=True, verbose_name='Теги')

    class Meta:
        verbose_name = 'Отчет'
        verbose_name_plural = 'Отчеты'

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('note-detail', args=[str(self.id)])

    def display_tags(self):
        return ', '.join([ tags.name for tags in self.tags.all() ])
        
    display_tags.short_description = 'Теги'


Модель для передачи отчета
Код

class NoteInstance(models.Model):
    """
    Модель представляющая копию поставленной задачи
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text="Уникальный ID для этой задачи")
    note = models.ForeignKey('Note', on_delete=models.SET_NULL, null=True)
    must_do = models.DateField("Выполнить до", null=True, blank=True)
    responsible = models.ForeignKey(Author, on_delete=models.SET_NULL, null=True, blank=True)

    LOAN_STATUS = (
        ('В работе', 'В работе'),
        ('Выполнил', 'Выполнил'),
        ('Отложено', 'Отложено'),
        ('Открыто', 'Открыто'),
    )
    
    status = models.CharField(max_length=10, choices=LOAN_STATUS, blank=True, default='Открыто', help_text='Статус задачи', verbose_name='Статус')

    @property
    def is_overdue(self):
        if self.must_do and date.today() > self.must_do:
            return True
        return False

    class Meta:
        ordering = ["must_do"]

        verbose_name = 'Задача'
        verbose_name_plural = 'Задачи'

    def __str__(self):
        return '{0} {1}'.format (self.id, self.note.title)


Но данная модель делает только пометку под отчетом, что он передан кому-то. Как дать редактировать отчет другому пользователю? Либо, как сделать копию отчета и передать ее другому пользователю, чтобы он продолжал его редактирование?
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@Kadabrov
Есть несколько вариантов
Первый в админке дать права на редакирование записей и автор, которому дали права может редактировать записи
Permissions
второй вариант во вьюхе написать проверку того, что автору разрешено редактировать этот пост
у модели NoteInstance проверяете responsible если он совпадает с залогиненым пользователем, то возвращаем тру и передаем через контекст в шаблон. В шаблоне проверяем через if и либо показываем ссылку на редактирование, либо нет
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы