我想用 Django 和 django-filter 制作一个动态过滤表单,如 stackoverflow 过滤器

我想在由 DetailView 渲染的模板上使用这个过滤器,现在的问题是我搜索了很多,但没有找到如何实现这一点的示例
在我的模板中,我列出了与“材料”类相关的所有“课程”,我想在同一模板上制作一个表单,以便我可以过滤此列表
我的模板
{% for course in material_detail.courses_set.all %}
<div class="course">
<h5>{{ course.course_name }}</h5>
<p>{{ course.course_description }} </p>
</div>
<hr/>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我有两个模型“材料”和“课程”我的 models.py
class Materials(models.Model):
materials_name = models.CharField(max_length=200)
materials_description = models.CharField(max_length=200, null=True)
slug_material = models.SlugField(blank=True, unique=True)
class Courses(models.Model):
course_name = models.CharField(max_length=200)
course_description = models.CharField(max_length=300, null=True)
material = models.ForeignKey(Materials, on_delete = models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
我有一个类 DetailView myviews.py
class MaterialsDetailView(DetailView):
model = Materials
template_name = 'tuts/material.html'
context_object_name = 'material_detail'
Run Code Online (Sandbox Code Playgroud)
我制作了一个filters.py 文件并在其上编写了此代码,但我不知道如何将其与我的Class DetailView 链接 …
我想呈现模板上所有对象的列表,其作者是当前登录的用户。我将当前用户的用户名传递给url.py:
<a href="{% url 'myscenarios' user.username %}">My List</a>
Run Code Online (Sandbox Code Playgroud)
我的网址.py:
path('myscenarios/<str:username>/', MyScenarioListView.as_view(), name='myscenarios'),
Run Code Online (Sandbox Code Playgroud)
我的问题是如何构建查询集views.py以及在 html 中的模板块中输入什么内容?
class MyScenarioListView(LoginRequiredMixin, ListView):
model = Scenario
template_name = 'testmanager/myscenarios.html'
context_object_name = 'myscenarios'
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get('username'))
return Scenario.objects.filter(scenarioAuthor = user).order_by('-date_posted')
Run Code Online (Sandbox Code Playgroud)
我应该在文件中输入什么代码myscenarios.html?
存在通用视图使我们的生活变得更容易,但是花在理解这些东西如何工作上的时间使得它们实际上变得更难.也许是我,但我试图想办法解决这个问题很长一段时间,我可以轻松地自己写一下这个观点并继续前进,但我坚持要学习它.
我想要显示一个自定义的DetailView类,代码抛出:
'Sculpture' object has no attribute 'filter'
from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView, DetailView
from sculptures.models import Sculpture
class SculptureListView(ListView):
"""docstring for SculptureListView"""
def get_queryset(self):
return Sculpture.objects.all()
class SculptureDetailView(DetailView):
"""docstring for SculptureDetailView"""
def get_queryset(self):
sculpture = get_object_or_404(Sculpture, slug=self.kwargs['slug'])
return sculpture
Run Code Online (Sandbox Code Playgroud)
我知道它需要一个线路修复 - 最多但无法弄清楚.
和想法?
我知道当视图的代码路径没有返回时HttpResponse,这是显而易见的.我是django的新手,所以这可能是完全错误的.
这是FormView代码.我需要覆盖render_to_response吗?
class AddAdvertView(FormView):
form_class = NewAdForm
def get(self, *args, **kwargs):
self.campaign = get_object_or_404(Campaign, id__exact = self.kwargs['campaign_id'])
def post(self, request, *args, **kwargs):
pass
def get_form(self, form_class):
return form_class(initial = {}, campaign = self.campaign)
def get_success_url(self):
return self.request.META.get('HTTP_REFERER', None)
def form_valid(self, form):
return HttpResponse('form valid')
def form_invalid(self, form):
return HttpResponse('form invalid')
Run Code Online (Sandbox Code Playgroud) 我正在使用django通用登录视图.这是我的urls.py
from django.contrib.auth.views import login
....
url(r'^login/$', login),
Run Code Online (Sandbox Code Playgroud)
这是我的login.html页面:
<body>
<h1>User Login</h1>
{% if form.errors %}
<p>Your username and password did not match.
Please try again.</p>
{% endif %}
<form method="post" action="">{% csrf_token %}
<p><label for="id_username">Username:</label>
{{ form.username }}</p>
<p><label for="id_password">Password:</label>
{{ form.password }}</p>
<input type="hidden" name="next" />
<input type="submit" value="login" />
</form>
</body>
Run Code Online (Sandbox Code Playgroud)
这是通用登录视图:
def login(request, template_name='registration/login.html',
redirect_field_name=REDIRECT_FIELD_NAME,
authentication_form=AuthenticationForm,
current_app=None, extra_context=None):
"""
Displays the login form and handles the login action.
"""
redirect_to = request.REQUEST.get(redirect_field_name, '')
if request.method == …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 generic create view
class TestCreateView(CreateView):
form_class = TestCreateForm
##forms.py
class TestCreateForm(forms.ModelForm):
class Meta:
model = Test
def __init__(self, user, *args, **kwargs):
super(TestCreateForm).__init__(*args, **kwargs)
self.fields['test_field'] = Testing.objects.filter(user=user)
Run Code Online (Sandbox Code Playgroud)
在基于函数的视图中,我会这样:
form = TestCreateForm(request.user)
Run Code Online (Sandbox Code Playgroud)
现在,在基于通用类的视图上,我是否必须重写,get并且post为此仅使用方法?
我正在尝试写一个mixin能够部分保存表单并稍后恢复.当表单很长并且用户无法一次性完成时,这非常有用.mixin下面的代码直接来自Marty Alchin的prodjango书.我已经在误差来自哪个是代码评论POST method在mixin.下面的详细的错误描述.
从追溯,我认为错误来自这两个调用self.get_form(form_class)和get_form_kwargs.但我不知道如何解决这个问题.
这是view:
class ArticleCreateView(PendFormMixin, CreateView):
form_class = ArticleForm
model = Article
template_name = "article_create.html"
success_url = '/admin'
Run Code Online (Sandbox Code Playgroud)
这是mixin:
from django.views.generic.edit import FormView
from pend_form.models import PendedForm, PendedValue
from hashlib import md5
class PendFormMixin(object):
form_hash_name = 'form_hash'
pend_button_name = 'pend'
def get_form_kwargs(self):
"""
Returns a dictionary of arguments to pass into the form instantiation.
If resuming a pended form, this …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ListView来显示我所有的城镇。
但是,我想显示每个城镇的居民人数。
class Town(models.Model):
name = models.CharField()
class Citizen(models.Model):
name = models.CharField()
town = models.ForeignKey(Town)
Run Code Online (Sandbox Code Playgroud)
class TownView(ListView):
model = Town
def get_context_data(self, **kwargs):
context = super(TownView, self).get_context_data(**kwargs)
context['towns'] = Town.objects.all().prefetch_related('players')
return context
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为 prefetch_related 仅当我在城镇视图中有玩家属性时才起作用,也许是通过 manytomany 字段。
我如何为每个城镇检索将外键设置为该城镇的公民数量?
另外,我的模板会是什么样子?目前,它看起来像这样:
<table>
{% for town in open_towns %}
<tr>
<td><a href="/town/join/{{ town.slug }}/">{{ town.name }}</a></td>
<td>population : {{ Player.objects.filter(town=town).count() }}</td>
</tr>
{% endfor %}
</table>
Run Code Online (Sandbox Code Playgroud)
但这显然也是错误的。
我正在创建一个应用程序,允许人们设置可能跨越多天的教学事件.这是我的一些代码:
楷模:
class Event(models.Model):
event_name = models.CharField('Event Name', max_length=200)
short_description = models.TextField('Short Description', max_length=140)
class EventDay(models.Model):
event = models.ForeignKey(Event)
day_name = models.CharField(max_length=30)
start_time = models.DateTimeField('Starting Date and Time')
end_time = models.DateTimeField('Estimate Ending Time')
Run Code Online (Sandbox Code Playgroud)
查看
from .models import Event, EventDay
class EventCreate(LoginRequiredMixin, CreateView):
model = Event
fields = ['event_name', 'short_description']
Run Code Online (Sandbox Code Playgroud)
在我添加活动的管理员中它完美运行,允许我根据需要添加多少天.但是,在管理员之外添加页面的事件只显示来自Event的字段,而不是EventDay.
我知道我的Views代码看起来有点空,只要与EventDay有关.但是,在发布之前,我尝试了许多不同的东西,我想到尝试获取像管理页面一样工作的字段.我只是遗漏了我在这里尝试过的烂摊子.我也在文档中找不到任何关于我出错的地方.
我没有包含我的模板/网址代码,因为我不认为这是问题所在.我可以再次添加事件,而不是EventDay部分.但是我对这一切都是新手所以如果你需要我发布更多代码我会的.
django ×10
python ×5
django-urls ×1
django-views ×1
foreign-keys ×1
listview ×1
login ×1
mixins ×1
variables ×1