我正在学习Django,我发现了基于类的视图,我想知道如何在这些视图上实现Ajax.
我搜索了github的django项目,我发现一些使用基于类的视图但不是ajax.
那么......有谁知道一个开源项目同时使用这两个东西?这种方式更容易学习.
谢谢 :)
我试图在基于类的视图CreateView中访问ForeignKeys.我希望能够从ForeignKeys动态设置CBV中的初始值,并动态设置来自ForeignKeys的模板链接.
这两个问题(1.初始值,2.模板链接)可以用类似的方法解决,也可以用不同的方法解决......我还在学习.也许第一个问题可以在内部解决views.py,第二个问题可以用模板语法解决ingredient_form.html吗?
我已经看到有关SO设置来自users(self.request.user)的初始值的问题,而不仅仅是来自普通外键的问题models.py.
我正在经历django-by-errors,并试图添加额外的功能来扩展我的django知识.
我的问题特别集中在views.py:IngredientAddView(CreateView)上
ingredient_form.html,并在urls.py:'recipe-detail'与'ingredient-add".
当我查看时'recipe-detail',我可以点击链接'ingredient-add'.我想'ingredient-add'"知道"哪个食谱点击它,并且能够将此食谱设置为初始值(我的尝试views.py:IngredientAddView:get_initials(self)不起作用),并且还能够链接回这个食谱(我的尝试ingredient_form.html:{% comment %}不起作用) ).
非常感谢任何帮助.
models.py
class Food(models.Model):
name=models.CharField(max_length=20,unique=True)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('food-detail',kwargs={'pk':self.pk})
class Recipe(models.Model):
title=models.CharField(max_length=80,unique=True)
slug=models.SlugField(max_length=80,unique=True)
description=models.TextField(blank=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('recipe-detail',kwargs={'slug':self.slug})
class Ingredient(models.Model):
recipe=models.ForeignKey(Recipe)
food=models.ForeignKey(Food)
def __str__(self):
return '%s (%s)' % (self.food, self.recipe)
Run Code Online (Sandbox Code Playgroud)
views.py
class FoodListView(ListView):
model=Food
class …Run Code Online (Sandbox Code Playgroud) django foreign-keys django-templates django-class-based-views
如何get_context_data从CVB DetailView中获取'pk'或'id' ?
class MyDetail(DetailView):
model = Book
template_name = 'book.html'
def get_context_data(self, **kwargs):
context = super(MyDetail, self).get_context_data(**kwargs)
context['something'] = Book.objects.filter(pk=pk)
return context
Run Code Online (Sandbox Code Playgroud)
网址:
url(r'^book/(?P<pk>\d+)/$', MyDetail.as_view(), name='book'),
Run Code Online (Sandbox Code Playgroud) 如果我有两种形式:
class ContactForm(forms.Form):
name = forms.CharField()
message = forms.CharField(widget=forms.Textarea)
class SocialForm(forms.Form):
name = forms.CharField()
message = forms.CharField(widget=forms.Textarea)
Run Code Online (Sandbox Code Playgroud)
并且想要使用基于类的视图,并将两个表单发送到模板,是否可能?
class TestView(FormView):
template_name = 'contact.html'
form_class = ContactForm
Run Code Online (Sandbox Code Playgroud)
看起来FormView一次只能接受一个表单.在基于函数的视图中,虽然我可以轻松地将两个表单发送到我的模板并在request.POST中检索两者的内容.
variables = {'contact_form':contact_form, 'social_form':social_form }
return render(request, 'discussion.html', variables)
Run Code Online (Sandbox Code Playgroud)
这是使用基于类的视图(通用视图)的限制吗?
非常感谢
我试图使用基于类的视图,并得到一个奇怪的错误.我使用视图的方式似乎是正常的方式:
配料/ models.py:
from django.db import models
from django.utils import timezone
class Ingredient(models.Model):
name = models.CharField(max_length=255)
description = models.TextField()
def get_prices():
purchases = self.purchase_set.all()
prices = [purchase.price for purchase in purchases]
Run Code Online (Sandbox Code Playgroud)
配料/ views.py:
from django.shortcuts import render, render_to_response, redirect
from django.http import HttpResponse, HttpResponseRedirect
from django.views.generic.edit import CreateView
from .models import Ingredient, Purchase
def IngredientCreateView(CreateView):
model = Ingredient
fields = ['all']
Run Code Online (Sandbox Code Playgroud)
配料/ urls.py:
from django.conf.urls import patterns, include, url
from ingredients.views import IngredientCreateView
urlpatterns = patterns('',
url(r'^new_ingredient$', IngredientCreateView.as_view(), name='new-ingredient'),
) …Run Code Online (Sandbox Code Playgroud) 我有2个型号,Father和Son.
我有一个页面要注册Father.在同一页面上,我有一个要注册的表单Son.
页面上有一个"更多"按钮,可以在同一页面上添加另一个Father和它们各自的按钮Son.
有没有人使用过任何例子CreateView?
因此,我的目标是能够在ModelForm中过滤ModelChoiceField查询集,只包含request.user创建的Places.
我的ModelForm很简单:
class PlaceEventForm(models.ModelForm):
class Meta:
model = Event
Run Code Online (Sandbox Code Playgroud)
我希望能够添加如下内容:
def __init__(self, *args, **kwargs):
super(PlaceEventForm, self).__init__(*args, **kwargs)
self.fields['place'].queryset = Place.objects.filter(created_by=request.user)
Run Code Online (Sandbox Code Playgroud)
但是,我似乎找不到在ModelForm中访问请求的方法.
我的观点是这样的:
class PlaceEventFormView(CreateView):
form_class = PlaceEventForm
template_name = 'events/event_create.html'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(PlaceEventFormView, self).dispatch(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我不确定这是否接近我应该做的,但我试过:
def get_form_kwargs(self):
kwargs = super(PlaceEventFormView, self).get_form_kwargs()
kwargs.update({'place_user': self.request.user})
return kwargs
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:init()得到了一个意外的关键字参数'place_user'
关于这个的任何想法?或者,任何人都可以想到一种方法来过滤我的ModelChoiceField在视图中,而无需将我的请求传递给ModelForm?
我想将django 1.3的基于类的通用视图用于表单,但有时必须在一个表单中管理多个表单类.但是,看起来基于FormMixin的现有视图假定单个表单类.
通用视图是否可行,我该怎么做?
编辑:澄清一下,我有一个表单但不止一个(基于ModelForm)类.例如在Django文档的inline_formset例子,我想提出一个网页,一个作家和他的书可以一次编辑,在一个单一的形式:
author_form = AuthorForm(request.POST, instance = author)
books_formset = BookInlineFormSet(request.POST, request.FILES, instance=author)
Run Code Online (Sandbox Code Playgroud) 很抱歉,如果这是一个微不足道的问题,但我一直在寻找一段时间,并且无法找到一个好的实现.
有人可以通过继承任何通用视图来提供如何在Django中实现仅后视图(可以处理文件上传)的示例吗?
我想创建一个处理所有博客帖子评论创建逻辑的端点.评论表格嵌入在我的博客页面上,因此,这些数据将被发送到网址POST.
我有一个Expense模型和一个ExpenseLineItem模型.就像典型的费用/发票一样,一个费用可以有多个行项目来弥补发票的总成本.我正在尝试使用基于类的视图来创建和更新费用.我已成功编码CreateView以使用多个费用订单项进行新费用.
我的问题是当我尝试更新已有多个费用行项目的现有费用时.这是我下面的代码,我无法弄清楚问题是什么.该混入(TitleMixin,CancelSuccessMixin,SelectedApartment)是我的,做工精细.
我收到一个错误,我相信,这意味着它正在尝试保存新副本,ExpenseLineItems但由于那些已经存在而失败.几乎就像我没有提出instance论点.
我究竟做错了什么?
forms.py
class ExpenseForm(ModelForm):
class Meta:
model = Expense
fields = ['apart', 'inv_num', 'vendor', 'due_date']
ExpenseLineItemFormset = inlineformset_factory(Expense, ExpenseLineItem, fields=('description', 'account', 'amt'), can_delete=False)
Run Code Online (Sandbox Code Playgroud)
这是我的ExpenseUpdate观点:
class ExpenseUpdate(TitleMixin, CancelSuccessMixin, SelectedApartment, UpdateView):
model = Expense
form_class = ExpenseForm
template_name = 'accounting/expense.html'
def get(self, request, *args, **kwargs):
self.object = self.get_object()
form_class = self.get_form_class()
form = self.get_form(form_class)
expense_line_item_form = ExpenseLineItemFormset(instance = self.object) …Run Code Online (Sandbox Code Playgroud)