我有一个表单类视图,当用户填写表单时,它会创建一个对象(目录中的产品)。该对象是在视图的 form_valid 方法内创建的。我希望视图通过 FormView 的“success_url”属性重定向到创建的对象 url(产品 url)。
问题是我不知道如何在 success_url 方法中指定该 url,因为在定义类本身时仍未创建该对象。我尝试过使用reverse_lazy或对象的get_absolute_url()方法,但同样的问题仍然存在。
class ImageUpload(FormView):
[...]
success_url = reverse_lazy('images:product', kwargs={'id': product.id })
[...]
def form_valid(self, form):
[...]
self.product = Product.objects.create(
user=self.request.user, title=title)
Run Code Online (Sandbox Code Playgroud) 我正在使用 Django 3.2
我有一个模型和 GCBV 定义如下:
class Foo(models.Model):
identifier = models.CharField(max_length=16, db_index=True)
# ...
class FooDetailView(DetailView):
model = Foo
template_name = 'foo_detail.html'
pk_url_kwarg = 'identifier'
# TODO, need to add logic of flagged items etc. to custom Manager and use that instead
queryset = Foo.objects.filter(is_public=True)
# # FIXME: This is a hack, just to demo
# def get_object(self, queryset=None):
# objs = Foo.objects.filter(identifier=self.request.GET.get('identifier', 0))
# if objs:
# return objs[0]
# else:
# obj = Foo()
# return obj
Run Code Online (Sandbox Code Playgroud)
在 …
我试图从基于django类的视图做一个CRUD应用程序.这是我更新/创建笔记的观点.
class CreateNoteView(CreateView):
model = Note
template_name = 'edit_note.html'
def get_success_url(self):
return reverse('notes-list')
def get_context_data(self):
context = super(CreateNoteView, self).get_context_data(**kwargs)
context['action'] = reverse('notes-create')
return context
class UpdateNoteView(UpdateView):
model = Note
template_name = 'edit_note.html'
def get_success_url(self):
return reverse('notes-list')
def get_context_data(self, **kwargs):
context = super(UpdateNoteView, self).get_context_data(**kwargs)
context['action'] = reverse('notes-edit',
kwargs={'pk':self.get_object().id})
return context
Run Code Online (Sandbox Code Playgroud)
这是我的模型文件:
# Create your models here.
class Note(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
pub_date = models.DateField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我的网址文件如下所示:
urlpatterns = patterns('',
url(r'^create/$',CreateNoteView.as_view(), name='notes-create',),
url(r'^$', ListNoteView.as_view(), name='notes-list',),
url(r'^edit/(?P<pk>\d+)/$', UpdateNoteView.as_view(), name='notes-edit',),
)
Run Code Online (Sandbox Code Playgroud)
模板如下: …
使用通用的基于类的CreateView我试图通过ClearableFileInput小部件上传图像,这是由inlineformset_factory使用的默认小部件,但这是失败的.
form.save()在我的视图中运行得很好,它似乎是失败的specimage_form.save().如果我在提交过程中打印self.request.FILES,看起来好像所选文件在内存中 - 但是在SpecImage save()函数中粘贴一个print语句,很明显这个函数永远不会被调用.
可以使用内联管理站点上传图像,在这种情况下我会看到print语句.
这是我的代码 - 感谢任何建议或指导.提前致谢..
models.py
class Spec(models.Model):
car = models.ForeignKey('vehicles_dvla_listpoint.AutoLookup')
owner = models.ForeignKey(User)
uploaded = models.DateField(default=date.today, editable=False)
def get_absolute_url(self):
return reverse('car_create')
def __unicode__(self):
return "{0}".format(self.car)
class SpecImage(models.Model):
def orig_car_id_folder(instance, filename):
return 'uploads/images/orig/{0}/{1}'.format(instance.car_id, filename)
def thumb_car_id_folder(instance, filename):
return 'uploads/images/thumb/{0}/{1}'.format(instance.car_id, filename)
car = models.ForeignKey(Spec)
orig_image = models.ImageField(
upload_to=orig_car_id_folder,
verbose_name='Upload Image',
)
thumbnail = models.ImageField(
upload_to=thumb_car_id_folder,
null=True,
blank=True,
)
def save(self, force_update=False, force_insert=False):
print "here ...." # << Don't see this where submitting outside of the admin
import …Run Code Online (Sandbox Code Playgroud) 我是django的新手,我正在尝试显示我在数据库中的专辑列表.这是专辑模型
class Album(models.Model):
"""Album model"""
title = models.CharField(max_length=255)
prefix = models.CharField(max_length=20, blank=True)
subtitle = models.CharField(blank=True, max_length=255)
slug = models.SlugField()
band = models.ForeignKey(Band, blank=True)
label = models.ForeignKey(Label, blank=True)
asin = models.CharField(max_length=14, blank=True)
release_date = models.DateField(blank=True, null=True)
cover = models.FileField(upload_to='albums', blank=True)
review = models.TextField(blank=True)
genre = models.ManyToManyField(Genre, blank=True)
is_ep = models.BooleanField(default=False)
is_compilation = models.BooleanField(default=False)
class Meta:
db_table = 'music_albums'
ordering = ('title',)
def __unicode__(self):
return '%s' % self.full_title
Run Code Online (Sandbox Code Playgroud)
我的观点是
class album_list(ListView):
template_name = "/music/album_list.html"
context_object_name = 'list_of_albums'
#paginate_by = '15'
def get_queryset(self): …Run Code Online (Sandbox Code Playgroud) django django-templates django-views django-class-based-views
如果我这样做:
class ActivityListView(ListView):
template_name = "activities/activities.html"
queryset = Activity.objects.filter(user=request.user)
Run Code Online (Sandbox Code Playgroud)
我明白了:
"请求"未定义
......显然.然后,如果我这样做:
def get_context_data(self, **kwargs):
queryset = Activity.objects.filter(owner=self.request.user)
context = super(ActivityListView, self).get_context_data(**kwargs)
context["activities"] = queryset
return context
Run Code Online (Sandbox Code Playgroud)
我明白了:
不正确配置的"ActivityListVew"必须定义"queryset"或"model",
我明白了 我想知道哪个是解决这个问题的最佳方法?
在Api上工作我想在Django中给出基于类的视图.
这是我到目前为止所得到的:
from django.conf.urls import url
from .api import Api
urlpatterns = [
url(r'^', Api.as_view())
]
Run Code Online (Sandbox Code Playgroud)
from django.http import HttpResponse
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import View
class Api(View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
super(Api, self).dispatch(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return HttpResponse("result")
def get(self, request):
return HttpResponse("result")
Run Code Online (Sandbox Code Playgroud)
从Postman调用此代码时,我不断遇到2个问题:
邮递员我在Post标题中设置了一个值但是当我使用调试器来检查POST数据时它就不存在了.
我一直在收到错误 The view api.api.Api didn't return an HttpResponse object. It returned None instead.
当我将post方法更改为get方法并使用Postman发送get请求时,我得到相同的结果.
我正在尝试更新具有外键字段的视图的记录,因为我遇到了错误,因为我尝试更新没有外键字段的另一个模型并且它工作得非常好.
还有其他这样的排队,但在我的情况下,我正在通过PK.
urls.py
urlpatterns = [
url(r'^info/(?P<studentpk>\d+)/update/$', views.updatestudent.as_view(), name="updatestudent"),
]
Run Code Online (Sandbox Code Playgroud)
views.py
class updatestudent(UpdateView):
model = Student
form_class = forms.studentform
template_name = "temp/updatestudent.html"
def get_success_url(self):
return reverse("courses")
Run Code Online (Sandbox Code Playgroud)
updatestudent.html
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update" />
</form>
Run Code Online (Sandbox Code Playgroud)
models.py
class Student(models.Model):
classfk = models.ForeignKey(Class)
name = models.CharField(max_length=100)
birth_date = models.DateField('Birthdate')
def __str__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
错误
AttributeError: Generic detail view updatestudent must be called with either an object pk or a slug.
Run Code Online (Sandbox Code Playgroud) 我有一个Django项目,其中包含一个用户可以搜索的Song Objects数据库.
我的models.py看起来像这样:
class Songs(models.Model):
title = models.CharField(max_length=100)
artist = models.CharField(max_length=100)
link = models.CharField(max_length=255, unique=True)
album = models.CharField(max_length=100)
duration = models.CharField(max_length=40) # Duration in num_secs
Run Code Online (Sandbox Code Playgroud)
我的views.py看起来像这样:
class ResultsView(ListView):
template_name = os.path.join(APPNAME, "results.html")
model = Songs
context_object_name = 'results'
paginate_by = 60
ordering = ['title']
def get_context_data(self, **kwargs):
context = super(ResultsView, self).get_context_data(**kwargs)
context['query'] = self.request.GET.get('query')
return context
def get_queryset(self, **kwargs):
query = self.request.GET.get('query')
query_set = Songs.objects.all()
results = query_set.filter(title__icontains=query)
return list(results)
Run Code Online (Sandbox Code Playgroud)
我的results.html模板如下所示:
{% if results %}
<div class="container-fluid">
<div class="row">
{% …Run Code Online (Sandbox Code Playgroud)