admin dailymail recommendation choice fix

remotes/origin/stage6
Alexander Burdeinyi 9 years ago
parent 47862cca12
commit 16310ccf07
  1. 59
      emencia/django/newsletter/admin_forms.py
  2. 8
      emencia/django/newsletter/models.py
  3. 132
      emencia/django/newsletter/templates/newsletter/recommend/create.html
  4. 1
      emencia/django/newsletter/views/admin_views.py
  5. 26
      events/admin.py
  6. 9
      events/admin_urls.py
  7. 1
      proj/admin_urls.py

@ -4,6 +4,7 @@ from collections import namedtuple
import re
from django import forms
from django.core.urlresolvers import reverse
from django.utils import translation
from django.utils.translation import ugettext_lazy as _
@ -24,7 +25,7 @@ from theme.models import Theme
from city.models import City
from country.models import Area, Country
from exposition.models import Exposition
from conference.models import Conference
class ContactSettingsForm(forms.ModelForm):
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput() ,required=False)
@ -248,17 +249,57 @@ class AttachmentForm(forms.ModelForm):
class NewsletterRecommendForm(forms.ModelForm):
rx = re.compile(r'^(?P<type>c|e)(?P<pk>\d+)$')
verbose = _(u'Создание/Редактирование рекомендации')
exposition = forms.IntegerField(label=_(u'Выставка'), widget=forms.HiddenInput(), required=False)
# exposition = forms.IntegerField(label=_(u'Выставка'), widget=forms.HiddenInput(), required=False)
event_models = {'c': Conference, 'e': Exposition}
event = forms.CharField(label=_(u'Событие'), widget=forms.Select())
class Meta:
model = NewsletterRecommend
fields = ('theme', 'exposition', 'fr', 'to')
fields = ('theme', 'fr', 'to')
def clean_exposition(self):
expo_id = self.cleaned_data['exposition']
def __init__(self, *args, **kwargs):
super(NewsletterRecommendForm, self).__init__(*args, **kwargs)
# import pdb; pdb.set_trace()
if self.instance and self.instance.pk:
event = self.instance.event()
id = event.__class__.__name__.lower()[:1] + str(event.pk)
option = u'<option value="{id}" selected="selected">{label}</option>'.format(id=id, label=event.name)
self.fields['event'].widget.render_options = lambda choices, value: option
self.initial['event'] = id
self.fields['event'].widget.attrs.update({
'data-ajax-url': reverse('admin_events_search'),
'select2': 'true',
})
def clean_event(self):
event = self.cleaned_data.get('event')
print(event)
match = self.rx.match(event)
if not match:
raise forms.ValidationError(_(u'Введены неверные данные'))
model = self.event_models.get(match.group('type'))
self.event_model = model
event_id = match.group('pk')
print(model, event_id, event)
try:
expo = Exposition.objects.get(id=expo_id)
except Exposition.DoesNotExist:
raise forms.ValidationError(_(u'Такой выставки не существует'))
return expo
event = model.objects.get(pk=event_id)
except model.DoesNotExist:
raise forms.ValidationError(_(u'Такого события не существует'))
return event
def save(self, commit=True):
obj = super(NewsletterRecommendForm, self).save(commit=False)
if self.cleaned_data['event']:
if self.event_model == Exposition:
obj.exposition = self.cleaned_data['event']
else:
obj.conference = self.cleaned_data['event']
if commit:
obj.save()
if not obj.pk:
obj.save()
obj.theme = self.cleaned_data['theme']
return obj

@ -256,7 +256,7 @@ class Contact(models.Model):
recommended = SearchQuerySet().models(Exposition, Conference)\
.filter(expohit=True, data_begin__gte=date)
if th_tg_filter:
paid_recommend = list(paid_recommend.filter(theme__in=th_tg_structure.keys()))
paid_recommend = list(paid_recommend.filter(Q(theme__in=th_tg_structure.keys()) | Q(theme__isnull=True)))
recommended = recommended.filter(th_tg_filter)
try:
ctx['recommended'] = choice(paid_recommend).event()
@ -745,11 +745,11 @@ class Newsletter(models.Model):
class NewsletterRecommend(models.Model):
theme = models.ManyToManyField('theme.Theme', null=True)
theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тема'), null=True, blank=True)
exposition = models.ForeignKey('exposition.Exposition', verbose_name=_(u'Выставка'), null=True)
conference = models.ForeignKey('conference.Conference', verbose_name=_(u'Конференция'), null=True)
fr = models.DateField(default=lambda: date.today())
to = models.DateField(blank=True, null=True)
fr = models.DateField(_(u'Первый день показов'), default=lambda: date.today())
to = models.DateField(_(u'Последний день показов'), blank=True, null=True)
creation_date = models.DateTimeField(_('creation date'), auto_now_add=True)

@ -1,92 +1,65 @@
{% extends 'base.html' %}
{% load static %}
{% block select2 %}
<link href="{% static 'js/select2-4.0.3/css/select2.min.css' %}" rel="stylesheet"/>
<script src="{% static 'js/select2-4.0.3/js/select2.full.min.js' %}"></script>
{% endblock select2 %}
{% block scripts %}
{# selects #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<script src="{% static 'js/select/select2.js' %}"></script>
<script src="{% static 'js/select/select2_locale_ru.js' %}"></script>
<script>
$(function(){
$('#id_fr').datetimepicker({
todayHighlight: true,
format : 'yyyy-mm-dd',
minView:2
});
$('#id_to').datetimepicker({
todayHighlight: true,
format : 'yyyy-mm-dd',
minView:2
});
$('#id_theme').select2({width: "element"});
$('#id_exposition').select2({
placeholder: 'Найти',
width: 'element',
ajax: {
url: '/admin/exposition/search/',
dataType: "json",
quietMillis: 200,
multiple: true,
data: function(term, page, theme){
return {term: term,
page: page};
},
results: function (data) {
var results = [];
$.each(data, function(index, item){
results.push({
id: item.id,
text: item.label
});
});
return {results: results};
}
},
initSelection : function(element, callback) {
var id= $(element).val();
var text = $(element).attr('data-init-text');
callback({id: id, text:text});
{#<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>#}
{#<script src="{% static 'js/select/select2.js' %}"></script>#}
{#<script src="{% static 'js/select/select2_locale_ru.js' %}"></script>#}
<script>
function make_event_select(select){
select.select2({
multiple: select.attr('multiple') || false,
language: "ru",
width: '550px',
ajax: {
url: select.data('ajax-url'),
dataType: "json",
quietMillis: 200,
}
});
$('#id_conference').select2({
placeholder: 'Найти',
width: 'element',
ajax: {
url: '/admin/conference/search/',
dataType: "json",
quietMillis: 200,
multiple: true,
data: function(params){
return {term: params.term,
page: params.page};
},
data: function(term, page){
return {term: term,
page: page};
},
processResults: function (data) {
return {results: $.map(data, function(obj) {
obj.text = obj.label;
return obj
})};
},
results: function (data) {
var results = [];
$.each(data, function(index, item){
results.push({
id: item.id,
text: item.label
});
});
return {results: results};
}
},
initSelection : function(element, callback) {
var id= $(element).val();
var text = $(element).attr('data-init-text');
callback({id: id, text:text});
},
createTag: function(params) {
return undefined;
},
});
}
});
});
</script>
{% endblock %}
$(document).ready(function(){
$('select[select2=true], input[select2=true]').each(function() {
make_event_select($(this));
// $(this).select2_sortable();
});
$('#id_fr').datetimepicker({
todayHighlight: true,
format : 'yyyy-mm-dd',
minView:2
});
$('#id_to').datetimepicker({
todayHighlight: true,
format : 'yyyy-mm-dd',
minView:2
});
});
</script>
{% endblock %}
{% block body %}
<form method="post" class="form-horizontal">
@ -99,7 +72,7 @@ $(function(){
<div class="box-content">
{% for field in form %}
<div class="control-group {% if field.errors %}error{% endif %}">
<label class="control-label"><b>{{ field.label }}:</b></label>
<label class="control-label">{% if field.field.required %}<b>{{ field.label }}:</b>{% else %}{{ field.label }}:{% endif %}</label>
<div class="controls">{{ field }}
<span class="help-inline">{{ field.errors }}</span>
</div>
@ -114,4 +87,5 @@ $(function(){
<input class="btn btn-large" type="reset" value="Отмена">
</div>
</form>
<div style="display: block;height: 200px;"></div>
{% endblock %}

@ -544,6 +544,7 @@ class RecommendsList(ListView):
model = NewsletterRecommend
template_name = 'newsletter/recommend/list.html'
class RecommendsCreateorEdit(CreateUpdateView):
model = NewsletterRecommend
form_class = NewsletterRecommendForm

@ -3,11 +3,16 @@ from functools import update_wrapper, partial
from django.contrib import admin
from django.conf.urls import patterns, url
from django.utils import translation
from haystack.query import SearchQuerySet
from modeltranslation.admin import TabbedTranslationAdmin
from functions.admin import DefaultAdmin
from functions.http import JsonResponse
from exposition.admin import get_by_lang
from exposition.models import Exposition
from conference.models import Conference
from .models import TargetAudience
@ -44,4 +49,23 @@ class TargetAudienceAdmin(DefaultAdmin, TabbedTranslationAdmin):
result = [{'id': obj.id, 'label': obj.title} for obj in qs]
return JsonResponse(result, safe=False)
admin.site.register(TargetAudience, TargetAudienceAdmin)
admin.site.register(TargetAudience, TargetAudienceAdmin)
def ajax_search(request):
# perpage = 30
pk_prefixes = {'conference': 'c', 'exposition': 'e'}
term = request.GET.get('term')
# page = request.GET.get('page')
lang = translation.get_language()
if not term:
qs = SearchQuerySet().models(Conference, Exposition).order_by('text')
else:
qs = SearchQuerySet().models(Conference, Exposition).autocomplete(content_auto=term.capitalize()).order_by('text')
result = []
for item in qs[:30]:
label = get_by_lang(item, 'name', lang)
if label:
result.append({'id': pk_prefixes.get(item.model_name) + item.pk, 'label': label})
return JsonResponse(result, safe=False)

@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from .admin import ajax_search
urlpatterns = patterns('',
url(r'^search/$', ajax_search, name='admin_events_search'),
)

@ -41,6 +41,7 @@ urlpatterns = required(
url(r'^stats/', include('stats_collector.admin_urls')),
url(r'^rosetta/', include('rosetta.urls')),
url(r'^redirects/', include('redirects.admin_urls')),
url(r'^events/', include('events.admin_urls')),
url(r'^language/add/', 'directories.admin.language_add'),
url(r'^currency/add/', 'directories.admin.currency_add'),

Loading…
Cancel
Save