Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
导致Django模型保存问题的多个字段_Django_Django Models - Fatal编程技术网

导致Django模型保存问题的多个字段

导致Django模型保存问题的多个字段,django,django-models,Django,Django Models,我想用ManyToManyField保存一个Django模型实例。当我尝试使用create()管理器执行此操作时,它会产生以下错误: Exception Value:'post' is an invalid keyword argument for this function 这是我的模型: class Amenity(models.Model): post=models.ManyToManyField(Post,blank=True,null=True)

我想用ManyToManyField保存一个Django模型实例。当我尝试使用create()管理器执行此操作时,它会产生以下错误:

 Exception Value:'post' is an invalid keyword argument for this function
这是我的模型:

    class Amenity(models.Model):
       post=models.ManyToManyField(Post,blank=True,null=True)
       name=models.CharField(max_length=50, choices=AMENITIES)

        def __unicode__(self):
            return str(self.name)
以下是视图的相关部分:

  if request.POST.get('amenities'):
            amens=request.POST['amenities'].split(',')
            p=int(post.id)      
            for a in amens:
                Amenity.objects.create(post=p,name=a)
            return HttpResponse('success')
我试图一次保存多个便利设施,我会在模型表单之外这样做,因为我考虑了设计,我不想在这种情况下创建自定义字段

post.id在此返回正确的值,因此这似乎不是问题所在


谢谢

您不应该将
post.id
传递到
post
字段,因为
post
是m2m,django会处理它。在设置
post
实例的地方?

您不应该将
post.id
传递到
post
字段,因为
post
是m2m,django会处理它。在设置
post
实例的位置?

有两种方法可以解决此问题:

1) 通过再次点击数据库:(哪个是最安全的)

2) 将id传递给post_id

p = int(post.id)
Amenity.objects.create(post_id=p, name=a)
编辑:

好的,在我的电脑上运行。首先,因为它是多对多的,所以最好使用post而不是post作为模型字段。好吧,不管怎样,你就是这样做的:

post = Post.objects.get(pk=id)
for a in amens:
    a = Amenity(name=a)
    a.post.add(post) #better if it said a.posts.add(post)
    a.save()

有两种方法可以解决此问题:

1) 通过再次点击数据库:(哪个是最安全的)

2) 将id传递给post_id

p = int(post.id)
Amenity.objects.create(post_id=p, name=a)
编辑:

好的,在我的电脑上运行。首先,因为它是多对多的,所以最好使用post而不是post作为模型字段。好吧,不管怎样,你就是这样做的:

post = Post.objects.get(pk=id)
for a in amens:
    a = Amenity(name=a)
    a.post.add(post) #better if it said a.posts.add(post)
    a.save()


您可能可以通过
ament.objects.create(posts=[p],name=a)
来实现,因为posts需要一个列表,尽管我自己还没有测试过它-我所有的
很多人都通过
来实现,因为他们添加了额外的元数据。

您可能可以通过
ament.objects.create(posts=[p],name=a)来实现
因为posts需要一个列表,尽管我自己还没有测试过它-我所有的
很多人都使用
,因为他们添加了额外的元数据。

对,所以我之前尝试过传递post实例,而不是post.id,但也失败了。对,所以我之前尝试过传递post实例,而不是post.id,这也失败了。我已经知道post实例了。问题是关键字参数“post”无效,即使在我的舒适度模型中它是一个M2M字段。post_id不是一个字段,因此也会引发一个有效的关键字arg errorHi。感谢您对post vs.post的建议。这是一个很好的观点。我确实有一些问题:1)为什么我不能用create()管理器创建对象?为什么我不能在您编辑的版本中将post关键字arg添加到Amenity实例构造函数中?我想这和M2M有关。最后,add方法来自哪里?它只是一个内置的python吗?我想用get_或_create替换Amenity.objects.create,但我想我需要在包含post参数的情况下这样做。它对create()不起作用,所以我假设它对get\u或\u createPost不起作用。实际上,post与get\u或\u create无关,因为amentie的表中没有它的记录,有第三个表包含该关系。你可以试试:a=Amenity.objects.get(name=a)除了:AmenityDoesNotExist:a=Amenity(name=a)[是的,我应该知道,谢谢fceruti。最后一个问题,add()方法来自哪里?我已经知道post实例了。问题是关键字参数“post”无效,即使它在我的舒适度模型中是M2M字段。post_id不是一个字段,因此也会引发一个关键字arg errorHi,这很有效。感谢关于post vs.posts的建议。这是一个很好的观点。我确实有一些问题:1)为什么我不能用create()创建对象manager?为什么我不能在您编辑的版本中将post关键字arg添加到Amenity实例构造函数中?我假设这与M2M through table有关。最后,add方法来自何处?它只是python内置的吗?我想用get\u或\u create替换Amenity.objects.create,但我想我需要用post参数来实现这一点包括在内。它对create()不起作用,所以我假设它对get_或_createPost不起作用。实际上,post与get_或_create无关,因为在Amenitie的表中没有它的记录,有第三个表包含该关系。您可以尝试:a=Amenity.objects.get(name=a)除了:AmenityDoesNotExist:a=Amenity(name=a)[是的,我应该知道,谢谢fceruti。最后一个问题,add()方法从何而来?我试过了,但对我来说不起作用。知道M2M字段需要一个列表非常有用。谢谢!啊,好的,很高兴知道。在创建了
ament
ament.posts=[p]
有效,所以我希望它也能作为
创建
中的关键字arg。我尝试过,但对我不起作用。知道M2M字段需要列表非常有用。谢谢!啊,好的,很高兴知道。创建
便利设施
后,
便利设施.posts=[p]
有效,所以我希望它也能作为
create
中的关键字arg。