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):
cleaned_data = super(UserForm, self).clean()
web_page = cleaned_data.get('web_page')
if not web_page:
return web_page
import socket
try:
socket.getaddrinfo(web_page, 80)

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

@ -7,7 +7,8 @@ urlpatterns = patterns('',
url(r'^logout', logout, {'next_page': '/accounts/login/'}),
url(r'^create_admin/$', 'accounts.views.create_admin'),
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'^translators/$', 'accounts.views.translators'),
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.
If form is posted redirect on the page of all users.
"""
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:
return HttpResponseRedirect('/accounts/all')

@ -1,8 +1,10 @@
# -*- coding: utf-8 -*-
from django.db import models
from hvad.models import TranslatableModel, TranslatedFields
from bitfield import BitField
# my models
from directories.models import Iata
from service.models import Service
class City(TranslatableModel):
@ -12,6 +14,18 @@ class City(TranslatableModel):
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)
country = models.ForeignKey('country.Country', null=True)
population = models.PositiveIntegerField(blank=True, null=True)

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

@ -5,8 +5,10 @@ from django.contrib.contenttypes import generic
#models
from directories.models import Language, Currency
from city.models import City
from service.models import Service
#func
from functions.custom_fields import EnumField
from bitfield import BitField
class Country(TranslatableModel):
"""
@ -15,6 +17,18 @@ class Country(TranslatableModel):
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')
url = models.SlugField(unique=True)

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

@ -9,6 +9,7 @@ from country.models import Country
from city.models import City
from theme.models import Theme
from place_exposition.models import PlaceExposition
from place_conference.models import PlaceConference
#functions
from functions.translate import populate_all, fill_trans_fields_all
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
"""
url = forms.CharField(label='url', required=False)
country = forms.ModelChoiceField(label='Страна', queryset=Country.objects.all(), empty_label=None)
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
city = forms.ChoiceField(label='Город', choices=[('','')])
tag = forms.MultipleChoiceField(label='Теги', required=False)
@ -49,7 +53,6 @@ class OrganiserForm(forms.Form):
widget=forms.TextInput(attrs={'placeholder': 'Количество'}))
foundation = forms.CharField(label='Год основания', required=False,
widget=forms.TextInput(attrs={'placeholder': 'Год основания'}))
own_place = forms.BooleanField(label='Собственные площадки', required=False)
#field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput())
@ -98,9 +101,11 @@ class OrganiserForm(forms.Form):
organiser = Organiser.objects.get(id=id)
organiser.theme.clear()
organiser.tag.clear()
organiser.place.clear()
organiser.place_conference.clear()
organiser.place_exposition.clear()
#simple fields
organiser.url = data['url']
organiser.address = data['address']
organiser.phone = data['phone']
organiser.fax = data['fax']
@ -108,7 +113,6 @@ class OrganiserForm(forms.Form):
organiser.email = data['email']
organiser.foundation = data['foundation']
organiser.social = data['social']
organiser.own_place = data['own_place']
organiser.staff_number = data['staff_number']
organiser.events_number = data['events_number']
@ -129,9 +133,11 @@ class OrganiserForm(forms.Form):
for item in data['tag']:
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']:
organiser.place.add(item.id)#.id cause select uses queryset
for item in data['place_conference']:
organiser.place_conference.add(item.id)#.id cause select uses queryset
# uses because in the next loop data will be overwritten
organiser.save()
@ -148,6 +154,11 @@ class OrganiserForm(forms.Form):
#save files
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):
"""
checking foundation

@ -4,6 +4,7 @@ from hvad.models import TranslatableModel, TranslatedFields
from accounts.models import User
from django.db.models.signals import post_save
#custom functions
from functions.translate import fill_trans_fields_all, populate_all
from functions.custom_fields import LocationField
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)
tag = models.ManyToManyField('theme.Tag', verbose_name='Теги', blank=True, null=True)
#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)
fax = models.FloatField(verbose_name='Факс', blank=True, null=True)

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

@ -62,7 +62,7 @@ def organiser_change(request, organiser_id):
#fill form with data from database
data = {'staff_number':organiser.staff_number, 'address': organiser.address,
'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}
if organiser.country:
@ -73,8 +73,10 @@ def organiser_change(request, organiser_id):
data['theme'] = [item.id for item in organiser.theme.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
"""
for code, name in settings.LANGUAGES:
obj = Organiser._meta.translations_model.objects.get(language_code = code,master__id=organiser_id) #access to translated fields
data['name_%s' % code] = obj.name
@ -85,11 +87,12 @@ def organiser_change(request, organiser_id):
data['title_%s' % code] = obj.title
data['keywords_%s' % code] = obj.keywords
data['descriptions_%s' % code] = obj.descriptions
"""
#fill form
form = OrganiserForm(data)
form = OrganiserForm(initial=data)
#set choices filled by ajax
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['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'])]
args = {}
args.update(csrf(request))

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

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

Loading…
Cancel
Save