Django表单,字段和模型

时间:2013-08-25 01:22:10

标签: django django-models django-forms django-users

我遇到了问题而且我无法找到解决方案。我有下一堂课

#models.py
from django import models

class Suggest(models.Model):
    user    = models.ForeignKey(User, null= True, blank=True)
    article = models.ForeignKey(Article)
    name    = models.ChardField(max_length=100)
    types   = ( ('suggest','Sugest'),('note','Note'),('complain','Complain'))
    type    = models.CharField(max_length=80, choices = types, default='suggest')
    content = models.TextField()
    dataX   = models.CharField(max_length=200) #example

#forms.py
from django import form
from .models import Suggest

class SuggestForm(form.ModelForm): #File forms.py,
    class Meta:
       fields = ('name','type','content')

我有一些更完整但是这段代码足以解释我的怀疑。我需要使用两个参数(article,request.user)创建此表单,文章必须通过隐藏字段保持关联。 当请求用户登录时,名称必须等于(request.user.first_name +“”+ request.user.last_name)并在用户中保存登录用户的id。用户登录时必须只显示内容。

我的第二个疑问是,如果此字段不是

形式,我将如何填写实例dataX

1 个答案:

答案 0 :(得分:0)

您可以通过创建Suggest模型的空实例来设置用户:

def some_view(request, ...):
    suggest = Suggest()
    initial = {}
    if request.user.is_authenticated():
        suggest.user = request.user
        initial['name'] = request.user.get_full_name()

    form = SuggestForm(..., instance=suggest, initial=initial)

    if request.method == 'POST' and form.is_valid():
        form.save()
    ...

仅显示部分字段您可以使用两个单独的表单(使用name且不使用)或在模板中添加{% if user.is_authenticated %}语句,以便在呈现HTML时跳过name字段形式。