Python '';对象在django中不可编辑
我有3种型号:用户、选择、卡。每个用户都会看同一套10张卡片,并决定每一张卡片是否重要 下面是我如何定义类及其关系的 在models.py中:Python '';对象在django中不可编辑,python,django,Python,Django,我有3种型号:用户、选择、卡。每个用户都会看同一套10张卡片,并决定每一张卡片是否重要 下面是我如何定义类及其关系的 在models.py中: class Choice(models.Model): user = models.ForeignKey(User) card = models.ManyToManyField(Card) is_important = models.NullBooleanField() class Card(models.Model):
class Choice(models.Model):
user = models.ForeignKey(User)
card = models.ManyToManyField(Card)
is_important = models.NullBooleanField()
class Card(models.Model):
card_number = models.IntegerField(primary_key=True)
content = models.TextField(null=False)
In views.py
(我尝试保存用户对卡的选择。)
然而,我得到了这个错误
'Card' object is not iterable
你能告诉我错误在哪里吗
非常感谢 首先,看起来您在第一个
.get()
参数中忘记了pk=
:Card.objects.get(pk=1)
其次,Choice.cards
是一个多字段,它需要一个项目列表,而不是一个特定的项目列表。您应该设置为:
choice.card.set(Card.objects.filter(pk=1))
请注意,=
.filter()
将返回一个QuerySet(可编辑)。我想您需要的是一个ForeignKey
而不是M2M字段,在这种情况下,您的代码可以工作(使用附加的pk=
)。首先,您似乎忘记了第一个参数中的pk=
。get()
参数:Card.objects.get(pk=1)
其次,Choice.cards
是一个多字段,它需要一个项目列表,而不是一个特定的项目列表。您应该设置为:
choice.card.set(Card.objects.filter(pk=1))
请注意,=
.filter()
将返回一个QuerySet(可编辑)。我认为您需要一个ForeignKey
而不是M2M字段,在这种情况下,您的代码可以工作(使用额外的pk=
)。您可以针对多对多字段添加对象,如下所示
card = Card.objects.create(card_number=any_number, content='abc')
choice.card.add(card)
您可以像这样针对多对多字段添加对象
card = Card.objects.create(card_number=any_number, content='abc')
choice.card.add(card)
在你的职能中:
def listings(request):
user = request.user
choice = Choice.objects.create(user=user, is_important = True)
choice.card= Card.objects.get(1)
下一行正在尝试获取卡对象。但是,我们需要指定提取哪张卡。
如果使用id,请按以下方式查询:
choice.card= Card.objects.get(pk=1)
或者使用ID列表:
choice.card = Card.objects.filter(pk__in=[12,22])
如果使用卡号字段:
choice.card= Card.objects.get(card_number=1)
或者使用卡号列表:
choice.card = Card.objects.filter(card_number__in=[12,22])
在你的职能中:
def listings(request):
user = request.user
choice = Choice.objects.create(user=user, is_important = True)
choice.card= Card.objects.get(1)
下一行正在尝试获取卡对象。但是,我们需要指定提取哪张卡。
如果使用id,请按以下方式查询:
choice.card= Card.objects.get(pk=1)
或者使用ID列表:
choice.card = Card.objects.filter(pk__in=[12,22])
如果使用卡号字段:
choice.card= Card.objects.get(card_number=1)
或者使用卡号列表:
choice.card = Card.objects.filter(card_number__in=[12,22])
Card.objects.get(1)
不是有效的django语法。你想在那里做什么?你是想用choice.card=card.objects.get(card\u number=your\u number)
来代替吗?如果书写正确,它将返回一个汽车对象,而不是很多。谢谢大家!我是Django的新手,在截止日期的压力下,我从开始就没有时间从结构上读取Django来获得基础。<代码> CART.Objor。GET(1)< /C> >是无效的Django语法。你想在那里做什么?你是想用choice.card=card.objects.get(card\u number=your\u number)
来代替吗?如果书写正确,它将返回一个汽车对象,而不是很多。谢谢大家!我是新的Django和在压力的期限,所以我没有时间读Django结构从一开始就得到了基础。