我的代碼非常簡單直接。這些都是我形式自動生成表格中的用戶特定數據
class LearningObjectiveForm(ModelForm):
class Meta:
model = LearningObjective
fields = ('learning_objective', 'topic',)
這是一個片段從我模板
<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)
的主題應該是見習具體。我是否必須在模板中編寫自己的表單,或者是否有這樣的方式,以便我仍然可以自動生成它?
注意'trainee'是_not_的外鍵'User'無論是。 – Selcuk 2015-03-02 13:58:05
然後你如何將學員鏈接到用戶?你如何知道請求用戶是哪位受訓者? – awwester 2015-03-02 14:20:24
好吧,這種方法會讓你陷入很多麻煩。看看擴展用戶模型。 https://docs.djangoproject.com/en/1.7/topics/auth/customizing/#extending-the-existing-user-model 你不能告訴哪個學員使用這種方法的應用程序。 – awwester 2015-03-02 14:25:55