在表格

时间:2017-09-04 21:52:17

标签: python django django-forms foreign-keys generic-relations

我的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})

我觉得在已经使用通用外部关系的同时为其他类创建单独的表单是多余的。没有它,有没有办法做到这一点?我在这里缺少什么?

提前致谢。

0 个答案:

没有答案