【问题标题】:Django Create Object without Forms from View with Foreign KeysDjango使用外键从视图中创建没有表单的对象
【发布时间】:2016-04-09 15:16:44
【问题描述】:

我正在尝试创建一些服务端点,这些端点根据发送到 URL 的数据创建对象。目前,我收到错误消息,说我的模型中的各种项目具有外键,它们没有启动实例。我怎样才能启动一个实例或让它工作。

Model.py

class timeListened(models.Model):
listenedeventid = models.AutoField(db_column='listenedEventID', max_length=10,primary_key=True)
userid = models.ForeignKey(AuthUser,db_column='userID',blank=False,null=False,max_length=255,default=get_current_user,editable=True)
sermonid = models.ForeignKey(Contentdownloadtable,db_column='sermonID',unique=True,verbose_name='Sermon Name')
dateListened = models.DateTimeField(db_column='dateTimeListened',auto_now=True)
    class Meta:
        managed = True
        db_table = 'timeListened'
        verbose_name = 'Viewed Sermon'
        verbose_name_plural = 'Viewed Sermons'
        app_label = 'web'

service.py

def sermonHistoryAdd(request):
if request.user.is_authenticated():
    if request.GET.get("sermonid","") == "":
        results = 'No Sermon ID passed'
    else:
        sermonid = request.GET.get("sermonid","")
        newHistory = timeListened(sermonid=sermonid,dateListened=datetime.datetime.now(),userid=request.user.id)
        newHistory.save()
        results = 'test'
else:
    results = 'Not Logged In.'
return HttpResponse(results)

我得到的错误信息是:

无法分配“1”:“timeListened.userid”必须是“AuthUser”实例。 如果我拿走 userid,我会得到同样的 sermonid —— 说它必须是一个“Contentdownloadtable”实例。

为什么不让我创建具有外键的对象。

URLS.py:
url(r'^service/sermonhistory/add/', service.sermonHistoryAdd, name='sermonHistoryAdd'),

【问题讨论】:

    标签: django model views


    【解决方案1】:

    你为什么不尝试使用

    userId = model.ForeignKey(User, .....)
    

    和使用

    newHistory = timeListened(sermonid=sermonid,dateListened=datetime.datetime.now(),userid=request.user)
    newHistory.save()
    

    【讨论】:

    • 同样的问题。我可以将其中的 userid 部分全部取出,它对 Contentdownloadtable 模型中的“sermonid”做同样的事情。
    • @TrentBrown 你必须从sermonid = request.GET['sermonid'] 创建一个Countdownloadtable 的实例并将该实例传递给timeListened(....., sermomid=sermonidIntace)
    • 我发现了如何在不创建实例的情况下做到这一点。我很好奇你将如何创建一个实例。我已经看到在 django 中做了这么多,却从未对它们做过任何事情。
    【解决方案2】:

    一切都很好,只是我不想为具有外键的对象加载实例——我只需要将 _id 添加到外键对象。

    newHistory = timeListened(sermonid_id=sermonid,dateListened=datetime.datetime.now(),username_id=username)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-07
      • 2021-10-30
      • 2019-01-17
      • 2011-05-10
      • 1970-01-01
      • 2013-10-01
      • 2021-03-08
      • 1970-01-01
      相关资源
      最近更新 更多