【问题标题】:How to avoid this dropdown combo box?如何避免这个下拉组合框?
【发布时间】:2012-02-04 12:33:49
【问题描述】:

我已经创建了播放列表和项目的模型形式,如下所示:

class playlistmodel(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=200)
    def __unicode__(self):
            return self.title

class itemsmodel(models.Model):
    playlist = models.ForeignKey(playlistmodel)
    item = models.TextField()

    def __unicode(self):
            return self.item
class playlistform(ModelForm):
    class Meta:
            model = playlistmodel

class itemsform(ModelForm):
    class Meta:
            model = itemsmodel

我的播放列表视图:

def playlistview(request):
    if request.method == 'POST':
            form = playlistform(request.POST)
            if form.is_valid():
                    data = form.save(commit=False)
                    data.user = request.user
                    a = data.save()
                    return render_to_response('playlist.html', {'data': a})
    else:
            form = playlistform()
            playlistmodel.user.id = request.user.id
            return render_to_response('playlist.html', {'form': form}, context_instance=RequestContext(request))

我还设置了登录脚本。如果您需要创建播放列表,则需要登录,问题是当我在登录后尝试创建播放列表时,它会在下拉组合框中显示所有用户以选择哪个用户并输入播放列表的标题.如果我想删除那个无用的下拉框怎么办。它还显示项目页面,例如在下拉框中选择播放列表并输入项目。

谢谢。

【问题讨论】:

标签: python django django-models django-forms


【解决方案1】:

也许你需要explicitly include or exclude what fields you want displayed to the user

然后,您必须在将对象保存到数据库之前手动更新您排除的对象部分。看看ModelForm.save() 方法的commit=False 参数为described in the documentation

例如,您的代码可能如下所示:

if form.is_valid():
    obj = form.save(commit=False)
    obj.user = request.user
    obj.save()

【讨论】:

  • 没关系,我排除了用户字段和播放列表字段,但是在创建播放列表的标题时出现完整性错误。异常值:reg_playlistmodel.user_id 不能为 NULL
  • 如何将上述 reg_playlistmode.user_id 的用户默认设置为 request.user 的当前登录用户
  • 我已经更新了我的答案,提供了一个文档链接,告诉你如何做到这一点。
  • @布赖恩尼尔:谢谢。但现在它显示这个 valueError,异常类型:ValueError 异常值:无法分配“”:“playlistmodel.user”必须是“User”实例。
  • 您必须在此处或在另一个问题中发布您的代码和回溯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 2016-12-18
  • 2016-03-31
  • 1970-01-01
相关资源
最近更新 更多