当用户在我的网站上注册时,他们会选择他们希望将其视为用户个人资料的一部分的模板。在这种情况下,因为他们想要看到绿色' profile,user.userprofile.color等于1.
我为绿色模板以及该模型的特定表单(称为form1)构建了一个特定模型(称为model1)。当用户选择“绿色”时在UserProfile表单中并提交表单,model1的实例将自动分配给用户
在views.py中,我想创建一个通用视图,它接受user.userprofile.color值并使用它来建立
a)以何种形式提供网页
b)表格基于什么模型
而不是像这样硬编码表单和模型值:
def homepagetemplate(request):
if request.method == 'POST':
form = form1(request.POST, request.FILES,
instance=request.user.model1)
if form.is_valid():
form.save()
return redirect('/accounts/')
else:
form = form1(instance=request.user.model1)
args = {'form': form}
return render(request, 'homepage.html', args)
在功能中而不是指定' form1'和' model1',我希望表单和模型值等于'形式' + i和' model' + i其中i等于值user.userprofile.color(即1)。
非常感谢任何帮助!
答案 0 :(得分:1)
我认为您正在寻找Django's contenttypes framework。
基本上你可以创建一个包含以下内容的模型:
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class Templates(models.Model):
template_name = models.SlugField() # e.g. "green"
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) # this will point to a template model
object_id = models.PositiveIntegerField() # this one will point to a specific row in your DB - resulting with an model instance
content_object = GenericForeignKey('content_type', 'object_id')
您的用户模型可以template = models.ForeignKey(Templates)
引用此模型,以便您可以执行此操作:
template = User.objects.get(pk=1).template.content_object
现在对于表单部分......这将更加棘手。也许Templates
模型可以存储导入路径,然后使用import_modeule
How to access a python module variable using a string [ django ]加载该特定表单?
感觉可能有更适合您的用户需求的解决方案。即使模型最终成为一个属性包并且对于前者具有动态形式Jacob Kaplan-Moss one of Django's core contributors explain how to achieve the latter,我也找不到任何快速的东西(对于这一个问题,这将是太难了)。