【发布时间】:2015-03-02 13:41:19
【问题描述】:
我的代码非常简单直接。这些是我的表格
class LearningObjectiveForm( ModelForm ):
class Meta:
model = LearningObjective
fields = ( 'learning_objective', 'topic', )
这是来自我的模板
的sn-p<form method="POST" action=".">
{% csrf_token %}
<table>
{{ form }}
</table>
<input type="submit" value="Speichern"/>
</form>
这种形式现在让每个用户都可以访问每个主题。由于该字段通常具有用户限制,因此我不希望显示每个主题,而只显示某个用户的主题。我的模型中针对这个特定案例的结构如下所示
class Trainee( models.Model ):
user = models.OneToOneField( User )
first_name = models.TextField()
last_name = models.TextField()
education_beginning = models.DateField()
comment = models.TextField( null = True, blank = True )
class Topic( models.Model ):
trainee = models.ForeignKey( Trainee )
topic = models.TextField()
class LearningObjective( models.Model ):
trainee = models.ForeignKey( Trainee )
topic = models.ManyToManyField( Topic, blank = True, null = True)
learning_objective = models.TextField()
还有我的观点
class LearningObjectiveView( LoginRequiredMixin, FormView ):
form_class = LearningObjectiveForm( user = request.user )
success_url = reverse_lazy( 'learning_objective' )
template_name = 'learningobjective.html'
def get_context_data( self, **kwargs ):
trainee = Trainee.objects.get( user = self.request.user )
context = super( LearningObjectiveView, self ).get_context_data( **kwargs )
context['learningobjective'] = LearningObjective.objects.filter( trainee = trainee.id )
context['topic'] = Topic.objects.filter( trainee = trainee.id )
return context
def form_valid( self, form ):
self.object = form.save( commit = False )
if self.request.user.is_authenticated():
self.object.trainee = Trainee.objects.get( user = self.request.user )
self.object.save()
return super( LearningObjectiveView, self ).form_valid( form )
主题应针对受训者。我必须在模板中编写自己的表单还是有这样的方法可以自动生成它?
【问题讨论】:
标签: django django-forms django-templates