def detail(request, file_id): file = cache.get('file_%s' % file_id) if not file: file = get_object_or_404(File, visible=True, pk=file_id) cache.set('file_%d' % (file.id), file, 60*600) file_data = cache.get('file_data_%s_%s' % (request.LANGUAGE_CODE, file_id)) if not file_data: file_data = Data.objects.get(file=file_id, lang=request.LANGUAGE_CODE) cache.set('file_data_%s_%s' % (request.LANGUAGE_CODE, file_id), file_data, 60*600) version_list = cache.get('version_list_%s' % file_id) if not version_list: version_list = Version.objects.filter(file=file_id).order_by('-post_date')[0:5] cache.set('version_list_%s' % file_id, version_list, 60*600) OBJECT = {'app': 'files', 'view': 'file', 'id': file_id} extra_context = {'file': file, 'version_list': version_list, 'file_data': file_data, 'OBJECT': OBJECT} context = template.RequestContext(request) context.update(extra_context) return render_to_response('files/detail.html', context_instance=context) class File(models.Model, ScoreManager, LabelManager, MirrorManager): category = models.ForeignKey(Category, related_name="file_category", db_index=True) name = models.CharField(maxlength=200, core=True) author = models.ForeignKey(User, raw_id_admin=True, db_index=True) contributors = models.ManyToManyField(User, related_name="file_contributors", db_index=True, filter_interface=models.HORIZONTAL, blank=True, null=True) visible = models.BooleanField(default=True) post_date = models.DateTimeField(auto_now_add=True) last_post_date = models.DateTimeField(auto_now_add=True) parent = models.ForeignKey('self', related_name="file_parent", db_index=True, blank=True, null=True, raw_id_admin=True) parent_type = models.ForeignKey(ParentType, db_index=True, blank=True, null=True) required_files = models.ManyToManyField('self', related_name="required_files_rel", db_index=True, blank=True, null=True) optional_files = models.ManyToManyField('self', related_name="optional_files_rel", db_index=True, blank=True, null=True) downloads_total = models.PositiveIntegerField(default=0) downloads_today = models.PositiveIntegerField(default=0) game = models.ForeignKey(Game, db_index=True) ratings_score = models.IntegerField(default=0, editable=False) ratings_votes = models.IntegerField(default=0, editable=False) labels = models.TextField(null=True, editable=False) comments_total = models.PositiveIntegerField(default=0, editable=False) def __str__(self): return self.name def get_absolute_url(self): return "/%s/files/details/%d/%s/" % (threadlocals.get_current_lang(), self.id, safe_name(self.name)) def get_edit_url(self): return "/%s/files/edit/%d/" % (threadlocals.get_current_lang(), self.id) def save(self, new_data): super(self, new_data) self.propagate() class Admin: list_display = ('name', 'post_date', 'author', 'category', 'game',) list_filter = ('post_date', 'category',) search_fields = ['name', 'game',] class Meta: verbose_name = _('File') verbose_name_plural = _('Files') ordering = ('-post_date',) unique_together = (('name', 'game',),) class History: pass class Version(models.Model): file = models.ForeignKey(File, db_index=True) md5 = models.CharField(null=True, maxlength=32, blank=True) name = models.CharField(maxlength=200) post_date = models.DateTimeField(auto_now_add=True) archive = models.FileField(upload_to='files/') game = models.ManyToManyField(Game) change_log = models.TextField(blank=True, null=True) author = models.ForeignKey(User, raw_id_admin=True, db_index=True) downloads = models.PositiveIntegerField() type = models.ForeignKey(Type, db_index=True) def __str__(self): return "%s %s" % (self.file.name, self.name) def get_absolute_url(self): return self.file.get_absolute_url() def get_download_url(self): return "/files/downloads/%d/" % self.id class Admin: list_display = ('file', 'name', 'post_date',) list_filter = ('post_date',) search_fields = ['file', 'name',] class Meta: verbose_name = _('File Version') verbose_name_plural = _('File Versions') ordering = ('-post_date',) unique_together = (('name', 'file',),) class History: pass