Здравствуйте.Вот моя модель:
# -*- coding: utf-8 -*-
from django.db import models
import os
from pytils.translit import slugify
import datetime
class Announs(models.Model):
def path_for_object(instance,filename):
filename1, fileext1 = os.path.splitext(unicode(filename))
return 'upload_product/' + slugify(filename1)+fileext1
GENDER_CHOICES = (
('M', 'Мальчик'),
('F', 'Девочка'),
)
ANNOUN_CHOICES = (
('F', 'Обычные бесплатные объявления'),
('S', 'Выделенное платное объявление'),
)
title = models.CharField('Заголовок объявления', max_length = 500)
section = models.ForeignKey("Sections", verbose_name='Раздел')
cat = models.ForeignKey("Categories", verbose_name='Категория')
date = models.DateField('Дата')
owner = models.CharField('Владелец', max_length = 500)
phone = models.CharField('Телефон', max_length = 500)
phone2 = models.CharField('Доп. Телефон', max_length = 500, blank=True, null=True)
email = models.EmailField('Email')
price = models.CharField('Цена', max_length = 500)
sort = models.CharField('Порода', max_length = 500)
gender = models.CharField('Пол', max_length=1, choices=GENDER_CHOICES)
age = models.CharField('Возраст', max_length = 500)
birth = models.DateField('Дата рождения', blank=True, null=True)
colour = models.CharField('Цвет', max_length = 500)
pic1 = models.ImageField(blank=True, null=True, upload_to=path_for_object, verbose_name='Изображение 1')
pic2 = models.ImageField(blank=True, null=True, upload_to=path_for_object, verbose_name='Изображение 2')
pic3 = models.ImageField(blank=True, null=True, upload_to=path_for_object, verbose_name='Изображение 3')
pic4 = models.ImageField(blank=True, null=True, upload_to=path_for_object, verbose_name='Изображение 4')
info = models.TextField('Текст объявления')
announ_type = models.CharField('Тип объявления', max_length=1, choices=ANNOUN_CHOICES )
period = models.DateField('Период объявления')
show = models.BooleanField('Показывать', default = True)
slug_title = models.SlugField('Имя для ссылки', unique = True)
position = models.IntegerField('Позиция для сортировки', default = 0)
seo_title = models.CharField('Seo название', max_length = 5000, blank = True, null = True)
metakeywords = models.CharField('Ключевые слова', max_length = 5000, blank = True, null = True)
metades = models.CharField('Мета описание', max_length = 5000, blank = True, null = True)
def __unicode__(self):
return self.title
class Meta:
ordering = ('position', )
verbose_name = 'Объявление'
verbose_name_plural = 'Объявления'
class Sections(models.Model):
def path_for_object(instance,filename):
filename1, fileext1 = os.path.splitext(unicode(filename))
return 'upload_product/' + slugify(filename1)+fileext1
title = models.CharField('Название раздела', max_length = 500)
pic = models.ImageField(upload_to=path_for_object, verbose_name='Обложка')
slug_title = models.SlugField('Имя для ссылки', unique = True)
show = models.BooleanField('Показывать', default = True)
position = models.IntegerField('Позиция для сортировки', default = 0)
seo_title = models.CharField('Seo название', max_length = 5000, blank = True, null = True)
metakeywords = models.CharField('Ключевые слова', max_length = 5000, blank = True, null = True)
metades = models.CharField('Мета описание', max_length = 5000, blank = True, null = True)
def __unicode__(self):
return self.title
def get_cats(self):
return Categories.objects.filter(show=True,section__slug_title=self.slug_title).order_by('position')
def cats_count(self):
return Categories.objects.filter(show=True,section__slug_title=self.slug_title).order_by('position').count()
def countz(self):
return Announs.objects.filter(show=True,cat__section__slug_title=self.slug_title).count()
def new(self):
return Announs.objects.filter(show=True,cat__section__slug_title=self.slug_title, date__gt=datetime.datetime.now() - datetime.timedelta(days=30)).count()
class Meta:
ordering = ('position', )
verbose_name = 'Раздел'
verbose_name_plural = 'Разделы'
class Categories(models.Model):
def path_for_object(instance,filename):
filename1, fileext1 = os.path.splitext(unicode(filename))
return 'upload_product/' + slugify(filename1)+fileext1
title = models.CharField('Название раздела', max_length = 500)
section = models.ForeignKey("Sections", verbose_name='Раздел')
pic = models.ImageField(upload_to=path_for_object, verbose_name='Обложка')
slug_title = models.SlugField('Имя для ссылки', unique = True)
show = models.BooleanField('Показывать', default = True)
position = models.IntegerField('Позиция для сортировки', default = 0)
seo_title = models.CharField('Seo название', max_length = 5000, blank = True, null = True)
metakeywords = models.CharField('Ключевые слова', max_length = 5000, blank = True, null = True)
metades = models.CharField('Мета описание', max_length = 5000, blank = True, null = True)
def __unicode__(self):
return self.title
def countz(self):
return Announs.objects.filter(show=True,cat__slug_title=self.slug_title).count()
def new(self):
return Announs.objects.filter(show=True,cat__slug_title=self.slug_title, date__gt=datetime.datetime.now() - datetime.timedelta(days=30)).count()
class Meta:
ordering = ('position', )
verbose_name = 'Категории'
verbose_name_plural = 'Категории'
class Announ_types(models.Model):
ANNOUN_CHOICES_TYPE= (
('F', 'Бесплатное'),
('S', 'Платное'),
)
period = models.IntegerField('Срок размещения объявления в днях', max_length = 50)
price = models.IntegerField('Стоимость в рублях', default = 0, max_length = 255, blank = True, null = True)
type = models.CharField('Тип объявления', max_length=1, choices=ANNOUN_CHOICES_TYPE)
show = models.BooleanField('Показывать', default = True)
position = models.IntegerField('Позиция для сортировки', default = 0)
def __unicode__(self):
return str(self.period)
def get_free(self):
return self.period+' дн.'
def get_special(self):
return self.period+' дн. за '+self.price+' руб.'
class Meta:
ordering = ('position', )
verbose_name = 'Цены и сроки на объявление'
verbose_name_plural = 'Цены и сроки на объявления'
Вот вьюха:
'''---Добавление объявления---'''
def announs_add(request):
sections=Sections.objects.filter(show=True).order_by('position')
cats=Categories.objects.filter(show=True, section__isnull=False).order_by('position')
antypes_f=Announ_types.objects.filter(show=True, type="F").order_by('position')
antypes_s=Announ_types.objects.filter(show=True, type="S").order_by('position')
if request.method == 'POST':
form = add_form(request.POST)
if form.is_valid():
cd = form.cleaned_data
announ = Announs(title=cd['title'], section=cd['section'], cat=cd['cat'], owner=cd['owner'], phone=cd['phone'], phone2=cd['phone2'], email=cd['email'], price=cd['price'], gender=cd['gender'], age=cd['age'], birth=cd['birth'], colour=cd['colour'], pic1=cd['pic1'], pic2=cd['pic2'], pic3=cd['pic3'], pic4=cd['pic4'], info=cd['info'], announ_type=cd['announ_type'], period=cd['period'])
announ.save()
mess = u""
mess += u"Заголовок объявления: %s\n" % cd['title']
mess += u"Секция: %s\n" % cd['section']
mess += u"Категория: %s\n" % cd['cat']
mess += u"Владелец: %s\n" % cd['owner']
mess += u"Телефон: %s\n" % cd['phone']
mess += u"Доп. телефон: %s\n" % cd['phone2']
mess += u"E-mail: %s\n" % cd['email']
mess += u"Цена: %s\n" % cd['price']
mess += u"Пол: %s\n" % cd['gender']
mess += u"Возраст: %s\n" % cd['age']
mess += u"Дата рождения: %s\n" % cd['birth']
mess += u"Цвет: %s\n" % cd['colour']
mess += u"Картинка 1: %s\n" % cd['pic1']
mess += u"Картинка 2: %s\n" % cd['pic2']
mess += u"Картинка 3: %s\n" % cd['pic3']
mess += u"Картинка 4: %s\n" % cd['pic4']
mess += u"Текст объявления: %s\n" % cd['info']
mess += u"Тип объявления: %s\n" % cd['announ_type']
mess += u"Период объявления: %s\n" % cd['period']
send_mail(u'Новое объявление на сайте',mess,'valery-elite1@mail.ru','priler@mail.ru')
form = add_form()
else:
form = add_form()
return render_to_response('announs/announs_add.html',
{
'sections':sections,'cats':cats,'antypes_f':antypes_f,'antypes_s':antypes_s,'form':form,
}, context_instance = RequestContext(request), )
Вот форма:
Информация о себе
Имя: {{ form.owner.errors.as_text }}
Телефон: {{ form.phone.errors.as_text }}
Доп. телефон: {{ form.phone2.errors.as_text }}
E-mail: {{ form.email.errors.as_text }}
Информация о питомце
Раздел:
{%for s in sections%}
{%if s.cats_count != 0%}{{s.title}}{%endif%}
{%for xd in s.get_cats%}
{{xd.title}}
{%endfor%}
{%endfor%}
{{ form.section.errors.as_text }}
Категория:
{%for c in cats%}
{{c.title}}
{%endfor%}
{{ form.cat.errors.as_text }}
Порода: {{ form.sort.errors.as_text }}
Пол: МальчикДевочка{{ form.gender.errors.as_text }}
Цвет: {{ form.colour.errors.as_text }}
Возраст: {{ form.age.errors.as_text }}
Дата рождения: {{ form.birth.errors.as_text }}
Стоимость: {{ form.price.errors.as_text }}
Фото: {{ form.photo1.errors.as_text }}
Фото 2: {{ form.photo2.errors.as_text }}
Фото 3: {{ form.photo3.errors.as_text }}
Фото 4: {{ form.photo4.errors.as_text }}
+ Добавить еще изображение
Объявление
Заголовок: {{ form.title.errors.as_text }}
Текст объявления: {{ form.info.errors.as_text }}
Тип объявления:Обычные бесплатные объявленияВыделенное платное объявление{{ form.announ_type.errors.as_text }}
Срок размещения:
{%for p in antypes_f%}
{{p.period}} дн.
{%endfor%}
{%for p in antypes_s%}
{{p.period}} дн. за {{p.price}} руб.
{%endfor%}
{{ form.period.errors.as_text }}
Объявление
При добавлении объявления возникает ошибка: Cannot assign "u'\u041d\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0432\u043e\u0435\u0439 \u043f\u043e\u043c\u043e\u0449\u0438'": "Announs.section" must be a "Sections" instance.Помогите решить проблему.Заранее спасибо!