- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在构建一个 Django 网络应用程序以允许客户注册类(class)。在“培训”页面上列出了所有类(class)。用户单击类(class)以获取更多详细信息并申请该类(class)。类(class)模型如下所示:
class Course(models.Model):
course_text = models.CharField(max_length=200)
slug = models.SlugField()
leader_text = models.TextField()
location = models.CharField(max_length=50)
start_date = models.DateField('start date')
duration_days = models.CharField (max_length=1)
cost = models.DecimalField(max_digits=7, decimal_places=2)
available = models.CharField(max_length=2)
class Meta:
ordering = ['start_date']
我有一个应用程序模型“申请人”,如下所示:
class Applicant(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(max_length=75)
contact_date = models.DateTimeField(auto_now=True)
courses = models.ManyToManyField(Course)
当用户单击一门类(class)时,该类(class)的详细信息将呈现在 View 中,并且还会为申请流程呈现一个 ModelForm。 View 如下所示:
def view_course(request, slug):
print Course.objects.all() #Just for testing
if request.method == "POST":
form = ApplicantForm(request.POST)
if form.is_valid():
model_instance = form.save(commit=False)
model_instance.save()
return HttpResponseRedirect('/thanks/')
else:
form = ApplicantForm()
return render(request, 'training/view_course.html', {'course': get_object_or_404(Course, slug=slug), 'form': form})
以上所有工作,我可以在我的 django 管理中查看用户申请。我想做的是收集他们申请的类(class)的具体信息,并将其与每个用户联系起来。我希望“类(class)”模型上的 ManyToMany 关系会有所帮助,但如果我将它包含在呈现的表单中,它只会提供选择任何类(class)的选项。
我正在使用诸如 Course.objects.all()
之类的查询集,但我需要根据 View 中“Course”的当前值对其进行过滤。是否有当前命令或类似命令来获取当前 session 中保存的数据?
我使用 Django 1.7 和 MySQL 作为数据库。
澄清
我想在用户填写的表单上显示最小值以简化申请流程。因此只需要 first_name、last_name 和 email。我希望将此信息链接到用户当前正在查看的类(class),以便这些值自动完成并且不会被用户看到。
至于数据库中的许多申请人实例,这不是多对多关系的工作方式吗?在我的管理页面中,我希望能够点击一个用户并查看他们注册的类(class),还能够点击一门类(class)以查看有多少用户申请了。我的管理页面还远远不够,但我希望能够在担心之前保存当前信息。这是管理员的样子:
from django.contrib import admin
from training.models import Course, Applicant
class CourseAdmin (admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['course_text', 'location', 'start_date', 'duration_days', 'cost', 'available']}),
('Course details', {'fields': ['leader_text'], 'classes': ['collapse']}),
]
list_display = ['course_text', 'location','start_date', 'was_published_recently']
list_filter = ['start_date', 'location']
search_fields = ['course_text']
admin.site.register(Course, CourseAdmin)
class ApplicantAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['first_name', 'last_name', 'email',]}),
]
list_display = ['first_name', 'last_name','email',]
list_filter = ['first_name', 'last_name']
search_fields = ['courses']
admin.site.register(Applicant, ApplicantAdmin)
某种解决方案
首先要感谢 spookylukey。完全正确的是,我有两件事正在发生,事实上,让同一个用户创建多个申请人对象可能会产生问题。我试图摆脱 auth/auth 的想法,因为我认为它会导致很多人流失。我现在明白为什么它很重要了。
撇开 spookylukey 关于使用 Model.ManyToManyField.add()
方法的建议行之有效。 view.py 的代码现在是:
def view_course(request, slug):
courseId = Course.objects.get(slug=slug)
if request.method == "POST":
form = ApplicantForm(request.POST)
if form.is_valid():
applicant = form.save(commit=False)
applicant.save()
form.save_m2m()
#The add method working it's magic
applicant.courses.add(courseId)
return HttpResponseRedirect('/thanks/')
else:
form = ApplicantForm()
#print request.session['course' : get_object_or_404(Course, slug=slug)]
return render(request, 'training/view_course.html', {'course': get_object_or_404(Course, slug=slug), 'form': form})
在管理界面中查看关系的额外问题已通过使用 InlineModelAdmin 对象解决。所以 admin.py 看起来像这样:
class SignupsInline(admin.TabularInline):
model = Applicant.courses.through
class CourseAdmin (admin.ModelAdmin):
#other styling goes here...
inlines = [
SignupsInline,
]
admin.site.register(Course, CourseAdmin)
class ApplicantAdmin(admin.ModelAdmin):
#other styling goes here...
inlines = [
SignupsInline,
]
admin.site.register(Applicant, ApplicantAdmin)
为了获得有关关联申请人对象(在类(class)管理部分)或类(class)对象(在申请人管理部分)的更多信息,我将以下功能添加到申请人模型(以及相应的类(class)模型):
def __unicode__(self):
return u'%s %s %s' % (self.first_name, self.last_name, self.email)
不是很好,但暂时达到了目的。
最佳答案
听起来您正在进行两件事:
创建 Applicant
记录,我假设您只想为每个用户执行一次 - 如果用户想要申请多个类(class),您不想提示再次查看他们的所有详细信息。
将申请人
与类(class)
相关联。
所以我认为您需要一个更复杂的工作流 - 一个在 session 中存储创建的 Applicant
数据或 id,并根据需要重复使用,或提示输入更多数据的工作流。
无论您是否这样做,修复 View 的方法是停止考虑尝试对所有内容使用 ModelForm
。 view_course
View 不允许人们编辑关于他们的Applicant
记录的所有内容——它不允许他们设置/取消设置他们的整个类(class)列表。所以使用 ModelForm
来设置 courses
是不合适的。相反,您需要使用 Applicant
API that has been created for you by the ORM .
在你的 View 代码中,我假设你有类似的东西:
course = Course.objects.get(slug=slug)
您需要将此类(class)
添加到申请人:
applicant = form.save()
applicant.courses.add(course)
applicant
对象将从 form.save()
的返回值中检索,或者从我上面提到的 session 中检索。
关于python - Django session 中的当前字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600647/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!