这似乎应该是显而易见的,但解决方案是在逃避我.通常我会写一个简单的视图函数,它会填充一个合适的表单并将其传递给视图,但解决方案感觉非常接近..
我有一张表格.我想使用object_id我在网址中捕获的表单来实例化此表单,然后使用extra_context参数将其发送到我的模板.
我有这样的事情:
class AddProductForm(forms.Form):
product = forms.IntegerField()
quantity = forms.IntegerField()
Run Code Online (Sandbox Code Playgroud)
还有这个:
url(r'^products/(?P<object_id>\d+)/$',
'django.views.generic.list_detail.object_detail',
{'queryset': Product.objects.all(),
'extra_context': {'form': AddProductForm({'product': <what?>, 'quantity': 1})},
name='product_detail'),
Run Code Online (Sandbox Code Playgroud)
有没有办法<what?>用捕获的值替换上面的object_id?(也许一个聪明的可调用者extra_context可以为我制作表格?)
我有一个显示模型列表的视图.在呈现视图之后,需要更新某些模型的某些属性:即,用户应该在第一次访问时看到原始的,未更改的值以及连续访问时(或页面重新加载时)的更新值.
我以为我可以通过基于类的通用视图来实现这一点.在官方文档暗示"之前或做一些额外的工作之后(重点煤矿)调用通用视图",但其显示之前给出的所有例子影响的模型.
我调查了信号,但无济于事.
产生异步任务是一种选择,但是,因为我需要做的就是更新几个模型中的字段(可能是一个或没有)并保存它们,这对于手头的任务来说似乎有些过分.
可以使用ajax请求来触发更新,或者使用自定义模板标记来显示相关字段并在此后更新它们.我不喜欢这两个,因为他们将应用程序逻辑移动到视图层.ajax技术还增加了第二个请求的开销.
然而,我似乎没有别的选择,或者我呢?是否有更实用的技术可以在渲染模板后插入通用视图或请求并执行额外的逻辑?
我是Django的新手,想知道在像ListView这样的通用视图中定义模型和查询集之间有什么区别.这是我在项目的urls.py文件中的代码示例:
urlpatterns = patterns('',
url(r'^$', ListView.as_view(
model=Person,
context_object_name='people',
template_name='index.html',
)),
)
Run Code Online (Sandbox Code Playgroud)
我也用过这个:
urlpatterns = patterns('',
url(r'^$', ListView.as_view(
queryset=Person.objects.all,
context_object_name='people',
template_name='index.html',
)),
)
Run Code Online (Sandbox Code Playgroud)
并且在我看来也得到了同样的结果.我假设您可以使用查询集执行不同的操作?
python django django-queryset django-views django-generic-views
我想在views.py中调用基于类的通用视图
请看我的代码......
urls.py
from django.conf.urls import patterns, include, url
from crm.views import *
urlpatterns = patterns('',
(r'^workDailyRecord/$', workDailyRecord),
)
Run Code Online (Sandbox Code Playgroud)
和我的views.py ....请看...
views.py
from django.views.generic import TodayArchiveView
from crm.models import *
def workDailyRecord(request):
if request.method == 'GET':
tView.as_view() # I want call class-based generic views at this line.
elif:
"""
Probably this part will be code that save the data.
"""
pass
class tView(TodayArchiveView):
model = WorkDailyRecord
context_object_name = 'workDailyRecord'
date_field = 'date'
template_name = "workDailyRecord.html"
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
假设我有一些继承自基类Animal的模型。我可以使用通用视图,并将Cat / 12路由到详细视图,将Dod / 10路由到具有不同上下文的同一详细视图。但是我想从URL中获取Model名称,这样就不必定义路由。
我有这样的事情:
url(r'^cat/(?P<slug>[-\w]+)/$',
DetailView.as_view(
queryset=Cat.objects.filter(),
model=Cat,
context_object_name='animal',
template_name='animal/detail.html'),
name='detail'),
url(r'^dog/(?P<slug>[-\w]+)/$',
DetailView.as_view(
queryset=Dog.objects.filter(),
model=Dog,
context_object_name='animal',
template_name='animal/detail.html'),
name='detail'),
...
Run Code Online (Sandbox Code Playgroud)
显然,这是太多重复的代码。我宁愿做这样的事情:
url(r'^?P<my_animal>\w+/(?P<slug>[-\w]+)/$',
DetailView.as_view(
queryset=my_animal.objects.filter(),
model=my_animal,
context_object_name='animal',
template_name='animal/detail.html'),
name='detail'),
...
Run Code Online (Sandbox Code Playgroud)
我可以这样做吗?
编辑
在达尔文的帮助下,这就是我最终得到的结果。它避免了if / else来获得Model名称:
class AnimalDetailView(DetailView):
context_object_name='animal'
template_name='animals/detail.html'
def dispatch(self, request, *args, **kwargs):
my_animal = kwargs.get('my_animal', None)
self.model = get_model('animals',my_animal.capitalize())
try:
ret = super(AnimalDetailView, self).dispatch(request, *args, **kwargs)
except AttributeError:
raise Http404
return ret
def get_queryset(self):
return self.model.objects.filter()
Run Code Online (Sandbox Code Playgroud)
下次我对继承有疑问时,我将咨询达尔文!大声笑
我正在运行Django 1.6.x.
为了扩展我的用户,我添加了另一个存储数据的模型:
class UserProfile (models.Model):
user = models.ForeignKey(User)
height = models.IntegerField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个视图,允许用户在那里添加自己的信息.开始django.views.generic.edit.CreateView,但也想提供至少编辑/更新一个.
所以我添加了导入并创建了一个视图:
from django.views.generic.edit import CreateView, UpdateView
# ....
class UserProfileCreateView(CreateView):
model = UserProfile
fields = ['height']
Run Code Online (Sandbox Code Playgroud)
我还在urls.py中添加了条目:
url(r'^userprofile/new/$', login_required(UserProfileCreateView.as_view()), name="add_userprofile")
Run Code Online (Sandbox Code Playgroud)
但现在我仍然坚持如何以正确的方式分配用户ID.我希望在后台设置此字段.任何提示?
我正在尝试使用CreateView跟踪创建对象的用户,我的工作方式与在文档中完成的操作完全相同(https://docs.djangoproject.com/en/dev/topics/class-based-views/ generic-editing /,Models和request.user)除了我不使用login_required()装饰器而是使用来自django-braces的LoginRequiredMixin.
我的模特:
class Contact(models.Model):
owner = models.ForeignKey(User, editable=False)
first_name = models.CharField(max_length=255,)
last_name = models.CharField(max_length=255,)
email = models.EmailField()
Run Code Online (Sandbox Code Playgroud)
我的看法:
class CreateContactView(LoginRequiredMixin, ContactOwnerMixin, CreateWithInlinesView):
model = models.Contact
template_name = 'contacts/edit_contact.html'
form_class = forms.ContactForm
inlines = [forms.ContactAddressFormSet]
def form_valid(self, form):
form.instance.owner = self.request.user
return super(CreateContactView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)
当我尝试创建一个新对象时,我收到一个错误:
IntegrityError at /new
null value in column "owner_id" violates not-null constraint
DETAIL: Failing row contains (3, null, John, Smith, john.smith@gmail.com).
Run Code Online (Sandbox Code Playgroud)
为什么会出现此错误?我唯一想做的就是在创建对象时自动添加到对象.
...编辑...
我注意到这个问题与CreateWithInlinesViewdjango extra-views有关.当我改变我的观点以使用django的泛型时,CreateView一切都可以正常运行.所以现在基本上问题是为什么这个解决方案无法使用CreateWithInlinesView?
django django-models django-generic-views django-class-based-views
我正在开发一个包含章节的项目,每个章节都有标题,内容和顺序.我想保持按顺序命名的字段'order',但是将字段显示在CreateView中作为其他内容,例如'Chapter number'.我发现的最好的信息建议更新Meta类中的"标签"属性,但这不适合我.
这就是我现在使用的,它不起作用:
class ChapterCreate(CreateView):
model = models.Chapter
fields = [
'title',
'content',
'order',
]
class Meta:
labels = {
'order': _('Chapter number'),
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用Meta之外的'label属性,但这也不起作用.我应该使用ModelForm,还是有正确的方法来做到这一点?
我正在使用 Django Rest Framework 的泛型(generics.ListCreateAPIView),当我发出 POST 请求时,我得到 Http 代码(200/400/..etc.)的响应和显示发布数据的 JSON,我需要知道如何我可以覆盖响应以获得自定义响应吗?
请注意,我使用
def perform_create(self,serializer):
return Response(<my response>)
Run Code Online (Sandbox Code Playgroud)
覆盖 POST 请求处理,但我仍然得到相同的响应
我将使用 django 中的通用视图。我定义了serializer_class并重写了get_queryset()方法,但是有一个错误告诉我重写get_queryset()方法。我想知道我的覆盖方法是如何错误的,以及我必须做什么来解决该错误。这是我的代码。
视图.py
from .models import arduino
from .serializers import arduinoToAndroidSerializers, arduinoToDatabaseSerializers
from rest_framework.viewsets import ViewSet
from rest_framework.response import Response
from rest_framework.generics import ListCreateAPIView
class arduinoToAndroidViewSet (ViewSet) :
def dataSend (self, request) :
user = self.request.user
queryset = arduino.objects.filter(name=user)
serializer = arduinoToAndroidSerializers(queryset, many=True)
return Response(serializer.data)
class arduinoToDatabaseViewSet (ListCreateAPIView) :
serializer_class = arduinoToDatabaseSerializers
def dataReceive (self, request) :
user = self.request.user
queryset = self.get_queryset()
queryset = arduino.objects.filter(queryset, name=user)
serializer = arduinoToDatabaseSerializers(queryset, many=True)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
序列化器.py
class arduinoToAndroidSerializers (serializers.ModelSerializer) :
name …Run Code Online (Sandbox Code Playgroud) django django-views django-generic-views django-serializer django-rest-framework