start working with users urls and change service relation with country and city

remotes/origin/1203
Nazar Kotjuk 12 years ago
parent c1d578982d
commit 3551ba563d
  1. 3
      accounts/forms.py
  2. 1
      accounts/templates/user_change.html
  3. 3
      accounts/urls.py
  4. 9
      accounts/views.py
  5. 14
      city/models.py
  6. 9
      country/admin.py
  7. 14
      country/models.py
  8. 1
      country/views.py
  9. 23
      organiser/forms.py
  10. 3
      organiser/models.py
  11. 20
      organiser/templates/organiser_add.html
  12. 13
      organiser/views.py
  13. 2
      proj/settings.py
  14. 5
      service/models.py

@ -90,6 +90,9 @@ class UserForm(forms.ModelForm):
def clean_web_page(self): def clean_web_page(self):
cleaned_data = super(UserForm, self).clean() cleaned_data = super(UserForm, self).clean()
web_page = cleaned_data.get('web_page') web_page = cleaned_data.get('web_page')
if not web_page:
return web_page
import socket import socket
try: try:
socket.getaddrinfo(web_page, 80) socket.getaddrinfo(web_page, 80)

@ -35,6 +35,7 @@
<h2><i class="icon-pencil"></i> Основная информация</h2> <h2><i class="icon-pencil"></i> Основная информация</h2>
</div> </div>
<div class="box-content"> <div class="box-content">
{{ form.user_id }}
{# email #} {# email #}
<div class="control-group {% if form.email.errors %}error{% endif %}"> <div class="control-group {% if form.email.errors %}error{% endif %}">
<label class="control-label">{{ form.email.label }}:</label> <label class="control-label">{{ form.email.label }}:</label>

@ -7,7 +7,8 @@ urlpatterns = patterns('',
url(r'^logout', logout, {'next_page': '/accounts/login/'}), url(r'^logout', logout, {'next_page': '/accounts/login/'}),
url(r'^create_admin/$', 'accounts.views.create_admin'), url(r'^create_admin/$', 'accounts.views.create_admin'),
url(r'^create_md5user/$', 'accounts.views.create_md5'), url(r'^create_md5user/$', 'accounts.views.create_md5'),
url(r'^change/(?P<user_id>\d+).*/$', 'accounts.views.user_change'), url(r'^change/(.*)/$', 'accounts.views.user_change'),
# url(r'^change/(?P<user_id>\d+).*/$', 'accounts.views.user_change'),
url(r'^all/$', 'accounts.views.user_all'), url(r'^all/$', 'accounts.views.user_all'),
url(r'^translators/$', 'accounts.views.translators'), url(r'^translators/$', 'accounts.views.translators'),
url(r'^translators/(?P<user_id>\d+)/$', 'accounts.views.translator_change'), url(r'^translators/(?P<user_id>\d+)/$', 'accounts.views.translator_change'),

@ -56,13 +56,18 @@ def translator_change(request, user_id):
def user_change(request, user_id): def user_change(request, url):
""" """
Return form of user and post it on the server. Return form of user and post it on the server.
If form is posted redirect on the page of all users. If form is posted redirect on the page of all users.
""" """
try: try:
user = User.objects.get(id=user_id) try:
user = User.objects.get(id=url)
user_id = getattr(user, 'id')
except:
user = User.objects.get(url=url)
user_id = getattr(user, 'id')
except: except:
return HttpResponseRedirect('/accounts/all') return HttpResponseRedirect('/accounts/all')

@ -1,8 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db import models from django.db import models
from hvad.models import TranslatableModel, TranslatedFields from hvad.models import TranslatableModel, TranslatedFields
from bitfield import BitField
# my models # my models
from directories.models import Iata from directories.models import Iata
from service.models import Service
class City(TranslatableModel): class City(TranslatableModel):
@ -12,6 +14,18 @@ class City(TranslatableModel):
Uses hvad.TranslatableModel which is child of django.db.models class Uses hvad.TranslatableModel which is child of django.db.models class
""" """
flags = []
"""
ids = [item.id for item in Service.objects.all() ]
if len(ids):
max = sorted(ids)[-1]
for i in range(max):
flags.append(str(i))
"""
services = BitField(flags=flags)
url = models.SlugField(unique=True) url = models.SlugField(unique=True)
country = models.ForeignKey('country.Country', null=True) country = models.ForeignKey('country.Country', null=True)
population = models.PositiveIntegerField(blank=True, null=True) population = models.PositiveIntegerField(blank=True, null=True)

@ -2,8 +2,15 @@
from django.contrib import admin from django.contrib import admin
from hvad.admin import TranslatableAdmin from hvad.admin import TranslatableAdmin
from models import Country from models import Country
from bitfield import BitField
from bitfield.forms import BitFieldCheckboxSelectMultiple
from bitfield.admin import BitFieldListFilter
class CountryAdmin(TranslatableAdmin): class CountryAdmin(TranslatableAdmin):
pass formfield_overrides = {
BitField: {'widget': BitFieldCheckboxSelectMultiple},
}
admin.site.register(Country, CountryAdmin) admin.site.register(Country, CountryAdmin)

@ -5,8 +5,10 @@ from django.contrib.contenttypes import generic
#models #models
from directories.models import Language, Currency from directories.models import Language, Currency
from city.models import City from city.models import City
from service.models import Service
#func #func
from functions.custom_fields import EnumField from functions.custom_fields import EnumField
from bitfield import BitField
class Country(TranslatableModel): class Country(TranslatableModel):
""" """
@ -15,6 +17,18 @@ class Country(TranslatableModel):
Uses hvad.TranslatableModel which is child of django.db.models class Uses hvad.TranslatableModel which is child of django.db.models class
""" """
flags = []
try:
ids = [item.id for item in Service.objects.all() ]
max = sorted(ids)[-1]
for i in range(max):
flags.append(str(i))
except: pass
services = BitField(flags=flags)
REGIONS =('europa', 'asia', 'america', 'africa') REGIONS =('europa', 'asia', 'america', 'africa')
url = models.SlugField(unique=True) url = models.SlugField(unique=True)

@ -97,4 +97,3 @@ def country_change(request, url):
args['obj_id'] = country_id args['obj_id'] = country_id
return render_to_response('country_add.html', args) return render_to_response('country_add.html', args)

@ -9,6 +9,7 @@ from country.models import Country
from city.models import City from city.models import City
from theme.models import Theme from theme.models import Theme
from place_exposition.models import PlaceExposition from place_exposition.models import PlaceExposition
from place_conference.models import PlaceConference
#functions #functions
from functions.translate import populate_all, fill_trans_fields_all from functions.translate import populate_all, fill_trans_fields_all
from functions.form_check import is_positive_integer from functions.form_check import is_positive_integer
@ -24,9 +25,12 @@ class OrganiserForm(forms.Form):
save function saves data in Organiser object. If it doesnt exist create new object save function saves data in Organiser object. If it doesnt exist create new object
""" """
url = forms.CharField(label='url', required=False)
country = forms.ModelChoiceField(label='Страна', queryset=Country.objects.all(), empty_label=None) country = forms.ModelChoiceField(label='Страна', queryset=Country.objects.all(), empty_label=None)
theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all()) theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all())
place = forms.ModelMultipleChoiceField(label='Место проведения', queryset=PlaceExposition.objects.all(), required=False) place_exposition = forms.ModelMultipleChoiceField(label='Места проведения выставок', queryset=PlaceExposition.objects.all(), required=False)
place_conference = forms.ModelMultipleChoiceField(label='Места проведения конференций', queryset=PlaceConference.objects.all(), required=False)
#creates select input with empty choices cause it will be filled with ajax #creates select input with empty choices cause it will be filled with ajax
city = forms.ChoiceField(label='Город', choices=[('','')]) city = forms.ChoiceField(label='Город', choices=[('','')])
tag = forms.MultipleChoiceField(label='Теги', required=False) tag = forms.MultipleChoiceField(label='Теги', required=False)
@ -49,7 +53,6 @@ class OrganiserForm(forms.Form):
widget=forms.TextInput(attrs={'placeholder': 'Количество'})) widget=forms.TextInput(attrs={'placeholder': 'Количество'}))
foundation = forms.CharField(label='Год основания', required=False, foundation = forms.CharField(label='Год основания', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'})) widget=forms.TextInput(attrs={'placeholder': 'Год основания'}))
own_place = forms.BooleanField(label='Собственные площадки', required=False)
#field for comparing tmp files #field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
@ -98,9 +101,11 @@ class OrganiserForm(forms.Form):
organiser = Organiser.objects.get(id=id) organiser = Organiser.objects.get(id=id)
organiser.theme.clear() organiser.theme.clear()
organiser.tag.clear() organiser.tag.clear()
organiser.place.clear() organiser.place_conference.clear()
organiser.place_exposition.clear()
#simple fields #simple fields
organiser.url = data['url']
organiser.address = data['address'] organiser.address = data['address']
organiser.phone = data['phone'] organiser.phone = data['phone']
organiser.fax = data['fax'] organiser.fax = data['fax']
@ -108,7 +113,6 @@ class OrganiserForm(forms.Form):
organiser.email = data['email'] organiser.email = data['email']
organiser.foundation = data['foundation'] organiser.foundation = data['foundation']
organiser.social = data['social'] organiser.social = data['social']
organiser.own_place = data['own_place']
organiser.staff_number = data['staff_number'] organiser.staff_number = data['staff_number']
organiser.events_number = data['events_number'] organiser.events_number = data['events_number']
@ -129,9 +133,11 @@ class OrganiserForm(forms.Form):
for item in data['tag']: for item in data['tag']:
organiser.tag.add(item) organiser.tag.add(item)
for item in data['place_exposition']:
organiser.place_exposition.add(item.id)#.id cause select uses queryset
for item in data['place']: for item in data['place_conference']:
organiser.place.add(item.id)#.id cause select uses queryset organiser.place_conference.add(item.id)#.id cause select uses queryset
# uses because in the next loop data will be overwritten # uses because in the next loop data will be overwritten
organiser.save() organiser.save()
@ -148,6 +154,11 @@ class OrganiserForm(forms.Form):
#save files #save files
check_tmp_files(organiser, data['key']) check_tmp_files(organiser, data['key'])
def clean_url(self):
cleaned_data = super(OrganiserForm, self).clean()
url = cleaned_data.get('url').strip()
return url
def clean_foundation(self): def clean_foundation(self):
""" """
checking foundation checking foundation

@ -4,6 +4,7 @@ from hvad.models import TranslatableModel, TranslatedFields
from accounts.models import User from accounts.models import User
from django.db.models.signals import post_save from django.db.models.signals import post_save
#custom functions #custom functions
from functions.translate import fill_trans_fields_all, populate_all
from functions.custom_fields import LocationField from functions.custom_fields import LocationField
from functions.form_check import translit_with_separator from functions.form_check import translit_with_separator
@ -24,7 +25,7 @@ class Organiser(TranslatableModel):
theme = models.ManyToManyField('theme.Theme', verbose_name='Отрасль', blank=True, null=True) theme = models.ManyToManyField('theme.Theme', verbose_name='Отрасль', blank=True, null=True)
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', blank=True, null=True) tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', blank=True, null=True)
#address. uses LocationField. saves data in json format #address. uses LocationField. saves data in json format
address = LocationField(verbose_name='Адресс', blank=True) address = LocationField(verbose_name='Адресс', blank=True, null=True)
phone = models.FloatField(verbose_name='Телефон', blank=True, null=True) phone = models.FloatField(verbose_name='Телефон', blank=True, null=True)
fax = models.FloatField(verbose_name='Факс', blank=True, null=True) fax = models.FloatField(verbose_name='Факс', blank=True, null=True)

@ -144,18 +144,18 @@
<span class="help-inline">{{ form.staff_number.errors }}</span> <span class="help-inline">{{ form.staff_number.errors }}</span>
</div> </div>
</div> </div>
{# own_place #} {# place_exposition #}
<div class="control-group {% if form.own_place.errors %}error{% endif %}"> <div class="control-group {% if form.place_exposition.errors %}error{% endif %}">
<label class="control-label">{{ form.own_place.label }}:</label> <label class="control-label">{{ form.place_exposition.label }}:</label>
<div class="controls">{{ form.own_place }} <div class="controls">{{ form.place_exposition }}
<span class="help-inline">{{ form.own_place.errors }}</span> <span class="help-inline">{{ form.place_exposition.errors }}</span>
</div> </div>
</div> </div>
{# place #} {# place_conference #}
<div class="control-group {% if form.place.errors %}error{% endif %}"> <div class="control-group {% if form.place_conference.errors %}error{% endif %}">
<label class="control-label">{{ form.place.label }}:</label> <label class="control-label">{{ form.place_conference.label }}:</label>
<div class="controls">{{ form.place }} <div class="controls">{{ form.place_conference }}
<span class="help-inline">{{ form.place.errors }}</span> <span class="help-inline">{{ form.place_conference.errors }}</span>
</div> </div>
</div> </div>
{# description #} {# description #}

@ -62,7 +62,7 @@ def organiser_change(request, organiser_id):
#fill form with data from database #fill form with data from database
data = {'staff_number':organiser.staff_number, 'address': organiser.address, data = {'staff_number':organiser.staff_number, 'address': organiser.address,
'events_number':organiser.events_number, 'phone':organiser.phone, 'events_number':organiser.events_number, 'phone':organiser.phone,
'fax':organiser.fax, 'web_page':organiser.web_page, 'own_place': organiser.own_place, 'fax':organiser.fax, 'web_page':organiser.web_page,
'email':organiser.email, 'social':organiser.social, 'foundation': organiser.foundation} 'email':organiser.email, 'social':organiser.social, 'foundation': organiser.foundation}
if organiser.country: if organiser.country:
@ -73,8 +73,10 @@ def organiser_change(request, organiser_id):
data['theme'] = [item.id for item in organiser.theme.all()] data['theme'] = [item.id for item in organiser.theme.all()]
data['tag'] = [item.id for item in organiser.tag.all()] data['tag'] = [item.id for item in organiser.tag.all()]
data['place'] = [item.id for item in organiser.place.all()] data['place_exposition'] = [item.id for item in organiser.place_exposition.all()]
data['place_conference'] = [item.id for item in organiser.place_conference.all()]
#data from translated fields #data from translated fields
"""
for code, name in settings.LANGUAGES: for code, name in settings.LANGUAGES:
obj = Organiser._meta.translations_model.objects.get(language_code = code,master__id=organiser_id) #access to translated fields obj = Organiser._meta.translations_model.objects.get(language_code = code,master__id=organiser_id) #access to translated fields
data['name_%s' % code] = obj.name data['name_%s' % code] = obj.name
@ -85,11 +87,12 @@ def organiser_change(request, organiser_id):
data['title_%s' % code] = obj.title data['title_%s' % code] = obj.title
data['keywords_%s' % code] = obj.keywords data['keywords_%s' % code] = obj.keywords
data['descriptions_%s' % code] = obj.descriptions data['descriptions_%s' % code] = obj.descriptions
"""
#fill form #fill form
form = OrganiserForm(data) form = OrganiserForm(initial=data)
#set choices filled by ajax #set choices filled by ajax
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])] #form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])]
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])] #form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])]
args = {} args = {}
args.update(csrf(request)) args.update(csrf(request))

@ -200,9 +200,9 @@ INSTALLED_APPS = (
'proj', 'proj',
'review', 'review',
'seminar', 'seminar',
'service',
'theme', 'theme',
'webinar', 'webinar',
#'service',
#django modules #django modules
'hvad', 'hvad',
'ckeditor', 'ckeditor',

@ -2,18 +2,19 @@
from django.db import models from django.db import models
from hvad.models import TranslatableModel, TranslatedFields from hvad.models import TranslatableModel, TranslatedFields
from bitfield import BitField from bitfield import BitField
from country.models import Country, City #from country.models import Country, City
class Service(TranslatableModel): class Service(TranslatableModel):
#event = models.ManyToManyField() #event = models.ManyToManyField()
url = models.SlugField(unique=True) url = models.SlugField(unique=True)
"""
countries = [str(item.id) for item in Country.objects.all()] countries = [str(item.id) for item in Country.objects.all()]
cities = [str(item.id) for item in City.objects.all()] cities = [str(item.id) for item in City.objects.all()]
country = BitField(flags=countries) country = BitField(flags=countries)
city = BitField(flags=cities) city = BitField(flags=cities)
"""
price = models.CharField(max_length=20, blank=True) price = models.CharField(max_length=20, blank=True)
params = models.CharField(max_length=255, blank=True) params = models.CharField(max_length=255, blank=True)
#translated fields #translated fields

Loading…
Cancel
Save