Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择要编辑的对象_Python_Django_Django Views - Fatal编程技术网

Python 选择要编辑的对象

Python 选择要编辑的对象,python,django,django-views,Python,Django,Django Views,我有一个简单的视图函数,它允许用户从html表(记录)中列出的项目中进行选择。点击一条记录会将用户转移到他可以编辑该特定记录的模板。代码如下: def edit_record(request): if request.method == 'POST': a=ProjectRecord.objects.get() form = RecordForm(request.POST, instance=a)

我有一个简单的视图函数,它允许用户从html表(记录)中列出的项目中进行选择。点击一条记录会将用户转移到他可以编辑该特定记录的模板。代码如下:

def edit_record(request):
        if request.method == 'POST':
                a=ProjectRecord.objects.get()
                form = RecordForm(request.POST, instance=a)
                if form.is_valid():
                        form.save()
                        return HttpResponseRedirect('/')
        else:
                a=ProjectRecord.objects.get()
                form = RecordForm(instance=a)
        return render_to_response('productionModulewire.html', {'form': form})
问题是,只有当数据库中只有一条记录时,函数才能正常工作。一旦我添加另一个,我就会得到一个多返回项错误。 我怀疑它与“objects.get()”有关,但我不知道如何正确构造视图

url很简单(可能太简单了):

模型如下所示:

class ProjectRecord(models.Model): 
    client = models.CharField(max_length=50, choices=CLIENT_CHOICES)
    account = models.CharField(max_length=50, choices=ACCOUNT_CHOICES)
    project_type = models.CharField(max_length=50, choices=TYPE_CHOICES)
    market = models.CharField(max_length=50, choices=MARKET_CHOICES)
    agencyID = models.CharField(max_length=30, unique=True, blank=True, null=True)
    clientID = models.CharField(max_length=30, unique=True, blank=True, null=True)
    prjmanager = models.CharField(max_length=64, unique=False, blank=True, null=True)
    acclead = models.CharField(max_length=64, unique=False, blank=True, null=True)
    artdirector = models.CharField(max_length=64, unique=False, blank=True, null=True)
    prdlead = models.CharField(max_length=64, unique=False, blank=True, null=True)
    intlead = models.CharField(max_length=64, unique=False, blank=True, null=True)
    prjname = models.CharField(max_length=200, unique=True)
    prjstatus = models.CharField(max_length=50, choices=STATUS_CHOICES)
    as_of = models.DateField(auto_now_add=False)
    format = models.CharField(max_length=64, unique=False, blank=True, null=True)
    target_studio = models.DateField(unique=False, blank=True, null=True)
    mech_return = models.DateField(unique=False, blank=True, null=True)
    comp_return = models.DateField(unique=False, blank=True, null=True)
    target_release = models.DateField(unique=False, blank=True, null=True)
    record_added = models.DateField(auto_now_add=True)
    record_modified = models.DateTimeField()
    studio_name = models.CharField(max_length=64, unique=False, blank=True, null=True)
    studio_process = models.CharField(max_length=64, unique=False, blank=True, null=True, choices=PROCESS_CHOICES)
    to_studio = models.DateTimeField(unique=False, blank=True, null=True)
    from_studio = models.DateTimeField(unique=False, blank=True, null=True)
    studio_name2 = models.CharField(max_length=64, unique=False, blank=True, null=True)
    studio_process2 = models.CharField(max_length=64, unique=False, blank=True, null=True, choices=PROCESS_CHOICES)
    to_studio2 = models.DateTimeField(unique=False, blank=True, null=True)
    from_studio2 = models.DateTimeField(unique=False, blank=True, null=True)
    comments = models.TextField(max_length=500, unique=False, blank=True, null=True)
    summary = models.TextField(max_length=500, unique=False, blank=True, null=True)
    upload_pdf = models.CharField(max_length=50, unique=False, blank=True, null=True)
    upload_achive = models.CharField(max_length=50, unique=False, blank=True, null=True)

    def __unicode__(self):
        return u'%s' % self.prjname

    class Admin: 
        pass

模型表单“RecordForm”是从中派生出来的。

如果没有更多信息,很难判断您需要更改什么,但您的猜测是正确的,问题在于您的
ProjectRecord.objects.get()调用

您应该传递一些要获取的信息,以便将列表限制为一个

在大多数情况下,您需要:

ProjectRecord.objects.get(pk=id)  
其中,
id
是您试图编辑的
ProjectRecord
的主键值


您能否显示
url.py中的相关代码以及有关
ProjectRecord
模型的更多信息?

关于
get
的重要内容是“获取什么?”

当你说

a=ProjectRecord.objects.get()
您忽略了提供任何选择标准。您希望从数据库中选择哪一行

哪一排?嗯。。。
GET
事务如何知道要编辑哪一行

通常,我们把它放在URL中

因此,您需要更新
URL.py
,以便在URL路径中包含记录ID。您需要更新视图函数定义以接受此记录ID。最后,您需要更新GET和POST以使用来自URL的此记录标识


更新
urls.py
以包含对象id。请参阅


谢谢大家的帮助。我编辑了原来的文章,以便它包含更多的代码。希望有帮助。内置的管理界面完全自动为您完成这项工作,而无需编写任何代码。既然你已经在管理界面中正常工作了,为什么还要自己编写这个事务呢?因为我正试图为大量的最终用户定制环境。例如,这个特定的记录数据库将只是用户可以调用的许多“独立”模块中的一个。建议的功能要求用户能够同时打开和处理多个“模块”。不知道如何通过url传递值(我知道…该死的新手:-)。在那个地区稍作研究就发现了金子!谢谢你的帮助。非常感谢。@kjarsenal:一定要接受其中一个对你有帮助的答案。我刚刚点击了左上角的复选标记。我想这就是我们所需要的。谢谢。@kjarsenal:这个网站有一个非常好的FAQ,解释了它是如何工作的,以及为什么它对像你这样想要问题答案的人有利。考虑一下阅读FAQ的时间可能对你很有价值。
a=ProjectRecord.objects.get()
urlpatterns = patterns('',
    (r'^class/(?P<object_id>\d+?)/$', 'app.views.edit_record'),
def edit_record( request, object_id = None ):
    if request.method == "POST":
        if object_id is None:
            return Http_404
        ProjectRecord.objects.get( pk = int(object_id) )

    etc.