下面的实质。 我有一些不同的杂志。 AutoForm模板显示所有文章和所有作者可能的选择(不仅来自当前杂志)。如何限制只从当前杂志的文章的作者选择?我可以只使用模板来做到这一点吗?如果没有,那么如何?从Django模板中的ModelForms隐藏外键字段
models.py
class Magazine(models.Model):
Name = models.CharField(max_length=200)
class Article(models.Model):
Name = models.CharField(max_length=200)
Magazine = models.ForeignKey(Magazine)
class Author(models.Model):
Name = models.CharField(max_length=200)
Magazine = models.ForeignKey(Magazine)
class Sets(models.Model):
Name = models.CharField(max_length=200)
Magazine = models.ForeignKey(Magazine)
Aut = models.ManyToManyField(Author, null=True, blank=True)
Set = models.ForeignKey(Article, null=True, blank=True)
forms.py:
class MagazineForm(ModelForm):
class Meta:
model = Magazine
fields = {'Name'}
class ArticleForm(ModelForm):
class Meta:
model = Article
fields = {'Name'}
class AuthorForm(ModelForm):
class Meta:
model = Author
fields = {'Name'}
class SetsForm(ModelForm):
class Meta:
model = Sets
fields = {'Name', 'Set', 'Aut'}
views.py
def building_details(request, magazine_id):
sets_form = SetsForm
args = {}
args.update(csrf(request))
args['magazine'] = Magazine.objects.get(id=magazine_id)
args['article'] = Article.objects.filter(Magazine=magazine_id)
args['author'] = Author.objects.filter(Magazine=magazine_id)
args['sets'] = Sets.objects.filter(Magazine=magazine_id)
args['setform'] = sets_form
return render_to_response('building.html', args)
模板
<form action='/add/{{ magazine.id }}/' method='post'>
{% csrf_token %}
{{ setform }}
<input type='submit' class='button' value="Добавить">
</form>
</div>
也许某处该条目有错误(我简单编辑,删除这里就不发挥作用,本质上)。一般来说,我拥有一切正常的工作,除了显示所有对象,而不是仅显示当前对象。
谢谢!它看起来像可以工作的东西,但是当我使用你的解决方案时,tyere是错误的:name'magazine_id'没有被定义 –
哎呀,现在应该工作。如果它的有用不要忘记接受或upvote。 – 2016-01-14 02:32:48
非常感谢!但现在有错误:'名称'窗体'未定义'在行'where.ModelChoiceField' –