I need to create an journal like application, where users can submit papers
and those papers can be reviewed. My code is publicly available on github
and the app is about ~50 done.
The reviewers should also be users of the same app and they should be able
to comment and perhaps give a rating. (I will create a model for this later)
How can I achieve that?
How do I restrict the Paper model only to the Author (the user who
submitted it), the Admins and the Reviewers?
```
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from .validators import FileValidator
# This function is used by the Paper model class.
def user_id_path(instance, filename):
"""
Constructs a path of the type /papers/<user_id>_<username>/<paper
title>/<filename>
instance: The instance provide dy django
filename: The filename provided by django
returns: A string containing the path of the uploaded paper.
"""
return "papers/{0}_{3}/{1}/{2}".format(instance.user.id,
instance.title, filename, instance.user.username)
class Paper(models.Model):
STATUS_CHOICES = (
('processing', 'Processing'),
('under_review', 'Under Review'),
('preliminary_reject', 'Preliminary Reject'),
('accepted', 'Accepted'),
)
user = models.ForeignKey(User, related_name='papers')
title = models.CharField(max_length=64, blank=False)
description = models.TextField(max_length=2000, blank=False)
authors = models.TextField(max_length=4096)
created = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=64, choices=STATUS_CHOICES,
default='processing')
# File validator.
validate_file = FileValidator(max_size=1024 * 1024 * 50, # Max size is 50Mb
content_types=('application/pdf',
'text/html', 'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.'
'document',
'text/plain',))
manuscript = models.FileField(upload_to=user_id_path, blank=False,
validators=[validate_file])
cover_letter = models.FileField(upload_to=user_id_path,
blank=False, validators=[validate_file])
supplementary_materials = models.FileField(upload_to=user_id_path,
blank=True, null=True, default=None,
validators=[validate_file])
class Meta:
ordering = ('-created',)
def get_absolute_url(self):
return reverse('journal.views.details', args=[str(self.id)])
def __str__(self):
return self.title
```
--
Sincerely,
Denis Nutiu
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CAKUfvewRANo4qSrHyFAPLbWg32P9Be8G-UZ1sZCG8rfJqg-9ng%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.