category.category_set.all()
class Category(models.Model):
parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
category.children.all()
что за бред вообще 2 input-а с одинаковым name, один из которых скрыт по средствам css )Очевидно, что хром заполняет первое найденное поле. Для этого их и дублируют и скрывают.
function(e) {
// отменяем привычное действие ссылки
e.preventDefault();
// добавляем класс loading
$(this).addClass("loading");
// переменной confirm_text присваиваем атрибут ссылки "Выход" с именем data-confirm или false
var confirm_text = $(this).data("confirm") || false;
// переменной method присваиваем атрибут ссылки "Выход" с именем data-method или get
var method = $(this).data("method") || "get";
// берем адрес ссылки для выхода
var url = $(this).attr("href");
// создаем пустой объект, будем использовать его для отправки данных на сервер
var post_data = {};
// если метод отправки = post, пробегаемся по всем атрибутам "data-post" ссылки "Выход" и заносим их значения с маленькой буквы в наш объект
if (method == "post") {
for (var i in $(this).data()) {
if (i.indexOf("post") === 0) {
post_data[i.replace(/^post/, "").toLowerCase()] = $(this).data(i)
}
}
}
var send = true;
// если у нас задан атрибут confirm_text (по всей видимости это alert-сообщение типа "Вы уверены что хотите выйти?"), то проверяем нажал ли пользователь "Да"
if (confirm_text) {
if (confirm(confirm_text)) {
send = true
} else {
send = false
}
}
// Если пользователь нажал "Да" или атрибут confirm_text не задан, то отправляем данные на сервер
if (send) {
$.ajax({
url: url,
cache: false,
dataType: "script",
type: method,
data: post_data
})
}
}
... а также почему если я перейду по ссылке toster.ru/auth/sign_out будет совсем не то, что я ожидаю (выход из аккаунта).
<img src="http://toster/sign-out">
и после захода на эту страницу все пользователи автоматом разлогинивались. class Advert(models.Model):
category = models.TextField()
title = models.CharField(max_length=64)
description = models.CharField(max_length=900)
date = models.DateTimeField(auto_now_add=True, null=True)
class AdvertImage(models.Model):
advert = models.ForeignKey(Advert)
photo = models.ImageField(upload_to='uploads/')
class AddAdvertForm(ModelForm):
class Meta:
model = Advert
fields = '__all__'
class AdvertImagesForm(forms.Form):
photos = forms.FileField(widget=widgets.FileInput(attrs={'multiple': True}))
def __init__(self, *args, **kwargs):
if 'request' in kwargs:
self.request = kwargs.pop('request')
super(AdvertImagesForm, self).__init__(*args, **kwargs)
def clean_photos(self):
# Остаются только картинки
photos = [photo for photo in self.request.FILES.getlist('photos') if 'image' in photo.content_type]
# Если среди загруженных файлов картинок нет, то исключение
if len(photos) == 0:
raise forms.ValidationError(u'Not found uploaded photos.')
return photos
def save_for(self, advert):
for photo in self.cleaned_data['photos']:
AdvertImage(photo=photo, advert=advert).save()
class CreateAdvertView(View):
template_name = 'bulletinboard/add_advert.html'
form_class = AddAdvertForm
form_images_class = AdvertImagesForm
model = Advert
def get(self, request):
form = self.form_class()
form_images = self.form_images_class()
return render(request, self.template_name, {'form': form, 'form_images': form_images})
def post(self, request):
form = self.form_class(request.POST)
form_images = self.form_images_class(request.POST, request.FILES, request=request)
if form.is_valid() and form_images.is_valid():
advert = form.save()
form_images.save_for(advert)
return HttpResponseRedirect('/')
return render(request, self.template_name, {'form': form, 'form_images': form_images})