我的models.py有:
from django.db import models
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey
class Category(models.Model):
name = models.CharField( max_length=100 )
parent = models.ForeignKey('self', null=True, related_name='children')
slug = models.SlugField(unique=True)
class Institution(models.Model):
name = models.CharField(max_length=300, null=False)
city = models.CharField(max_length=100, null=False)
country = models.CharField(max_length=100, null=False)
class Author(models.Model):
name = models.CharField(max_length=150, null=False)
degree = models.CharField(max_length=150, null=False)
degree_completed = models.BooleanField(default=False, null=False)
class Article(models.Model):
name = models.CharField(max_length=300, null=False)
uploader = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
highlights = models.FileField(upload_to='user_uploads/%Y/%m/%d/')
word_document = models.FileField(upload_to='user_uploads/%Y/%m/%d/')
pdf_document = models.FileField(upload_to='user_uploads/%Y/%m/%d/')
#Implementing generic relations
content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL, null=True)
object_id = models.PositiveIntegerField(default=None)
content_object = GenericForeignKey('content_type', 'object_id')
def __str__(self):
return self.name
我的课程文章与其他班级有通用的外交关系。现在我想使用这个Article类来创建一个包含所有其他类的表单。 在文档中,我可以使用generic_inlineformset_factory来执行此操作,但我还需要为其他类创建表单以显示在我的模板中。
我的views.py有:
def submitArticle(request):
current_user = request.user
ArticleUploadForm = generic_inlineformset_factory(
Article, form=ModelForm, formset=BaseGenericInlineFormSet,
ct_field='content_type', fk_field='object_id', extra=1)
if request.method == 'POST':
article_formset = ArticleUploadForm(request.POST, request.FILES, instance=current_user)
if article_formset.is_valid():
article_formset.save()
#Temporary redirect to homepage
return render(request, 'personal/home.html')
else:
#Need to add error here
article_formset = ArticleUploadForm(instance=current_user)
return render(request, 'personal/upload.html', {'article_formset' : article_formset})
else:
article_formset = ArticleUploadForm(instance=current_user)
category_form = CategoryForm(instance=current_user)
institution_form = InstitutionForm(instance=current_user)
author_formset = modelformset_factory(Author, fields = '__all__')
return render(request, 'personal/upload.html', {
'article_formset' : article_formset,
'category_form' : category_form,
'institution_form' : institution_form,
'author_formset' : author_formset})
我觉得在已经使用通用外部关系的同时为其他类创建单独的表单是多余的。没有它,有没有办法做到这一点?我在这里缺少什么?
提前致谢。