【发布时间】:2016-05-14 19:08:16
【问题描述】:
请您抽出宝贵的时间帮助我。
我的应用程序的想法是每个用户将收到一组相同的 30 张卡片,然后他必须决定每张卡片是否重要。
我有 2 个类如下:
class Card(models.Model):
card_number = models.IntegerField(unique=True)
content = models.TextField(null=False)
def display(self):
return self.content
def __str__(self):
return "Card " + str(self.card_number)
class Choice(models.Model):
user = models.ForeignKey(User)
card = models.ForeignKey(Card)
is_important = models.NullBooleanField(default=None)
class Meta:
unique_together = ('user','card')
def get_choices(user):
return Choice.objects.filter(pk=user.pk)
def __str__(self):
return " %s : Card %d : %s" % (self.user.username, self.card.card_number, self.is_important)
在views.py中,当用户决定卡片是否重要时:
card_number= request.GET.get('card_number')
is_important= request.GET.get('is_important')
user = request.user
# assume that user=admin, card_number=1 and is_important is False
if card_number != None and is_important != None:
try:
card = Card.objects.get(card_number=card_number)
choice= Choice.objects.create(user=user, card=card, is_important=is_important)
print(choice) # return admin: Card 1: False
print(Choice.objects.get(card__card_number=card_number)) # return admin: Card 1: True
print(choice) # return admin: Card 1: False
except IntegrityError:
print("User had done with this Card")
我不明白为什么:
print(choice) # return admin: Card 1: False
但是
print(Choice.objects.get(card__card_number=1)) # return admin: Card 1: True
谢谢!
【问题讨论】:
-
我不确定这是否相关,但您的
Choice模型定义中的 return 语句需要缩进另一个级别 -
并在
Meta声明中 -
你能提供一个你提出的 GET 请求的例子吗?
-
谢谢大家。我已经尝试了 schwobaseggl 的解决方案,它就像一个魅力。顺便说一句,我的 GET 请求是:“127.0.0.1:8000/list/?card=3&choice=False”
标签: python django django-models django-database