Форум сайта python.su
0
После выполнения update не выполняется переход на два уровня ниже, а выполняется стандарный переход на “../” (то есть от url отрезается только число)
class MyModel(models.Model):
ex_user_profile = models.ForeignKey(ExUserProfile)
...
def get_absolute_url(self):
# return reverse('user_detail')
return reverse_lazy('user_detail')
class MyFormUpdate(generic.UpdateView):
model = MyModel
fields = [ ... ]
success_url = '../../'
Офлайн
19
судя по исходникам
def get_success_url(self): """ Returns the supplied URL. """ if self.success_url: url = self.success_url % self.object.__dict__ else: try: url = self.object.get_absolute_url() except AttributeError: raise ImproperlyConfigured( "No URL to redirect to. Either provide a url or define" " a get_absolute_url method on the Model.") return url
Отредактировано PanovSergey (Апрель 28, 2014 12:13:07)
Офлайн
75
url это не папки
Офлайн
75
url это не папки
Офлайн
0
PanovSergey
судя по исходникам
class MyFormUpdate(LoginRequiredMixin,generic.UpdateView): model = MyModel success_url = reverse_lazy('user_detail') class MyFormDelete(LoginRequiredMixin,generic.DeleteView): model = MyModel success_url = reverse_lazy('user_detail') url(r'^profile/$', views.ExUserProfileView.as_view(), name='user_detail'),
Формы моделей(Model Forms)
Общие CBV раскрываются во всей красе при работе с моделями. Они автоматически создают класс ModelForm при работе с моделями:
Если указано значение атрибута model, то будет использоваться этот класс модели.
Если метод get_object() возвращает объект, то будет использоваться класс этого объекта.
Если указан атрибут queryset, то будет использована модель этого запроса(queryset).
Представления форм, связанные с моделями, предоставляют реализацию метода form_valid(), которая автоматически сохраняет модель. Вы можете переопределить этот метод согласно вашим требованиям; смотрите примеры ниже.
Вы можете не устанавливать значение success_url для классов CreateView или UpdateView - они воспользуются методом get_absolute_url() объекта модели (если такой объект доступен).
Если вам необходимо специальное поведение для ModelForm (например для дополнительной валидации данных) просто установите form_class в нужное значение.
Примечание
При создании пользовательского класса формы, вы по прежнему должны указать модель. Даже в том случае если в form_class используется ModelForm.
Во-первых, мы должны добавить метод get_absolute_url() в наш класс Author :
# models.py
from django.core.urlresolvers import reverse
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=200)
def get_absolute_url(self):
return reverse('author-detail', kwargs={'pk': self.pk})
Затем мы можем использовать класс CreateView и “сотоварищей” чтобы выполнить необходимую работу. Обратите внимание, что мы лишь создаем конфигурацию для CBV; нам не нужно писать никакого кода, реализующего логику:
# views.py
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Author
class AuthorCreate(CreateView):
model = Author
fields =
class AuthorUpdate(UpdateView):
model = Author
fields =
class AuthorDelete(DeleteView):
model = Author
success_url = reverse_lazy('author-list')
Примечание
Мы должны использовать здесь функцию reverse_lazy(), а не просто reverse, поскольку urls не “загружаются” при импорте файла.
Офлайн
0
Singularity
url это не папки
class ExUserProfileFormUpdate(LoginRequiredMixin,generic.UpdateView):
model = ExUserProfile
success_url = '../'
def get_object(self, queryset=None):
return ExUserProfile.objects.get( user_id = ... )
Офлайн