协助Django模型关系

2024-09-28 21:15:18 发布

您现在位置:Python中文网/ 问答频道 /正文

    class Pinyin(models.Model):
    pinyinWord = models.CharField(max_length=200)
    englishWord = models.CharField(max_length=1000)
    englishPhrase = models.TextField()
    pinyinPhrase = models.TextField()
    def __unicode__(self):
        return u"%s | %s" % (self.pinyinWord, self.englishWord)

class Learned(models.Model):
    def __unicode__(self):
        return u"%s | %s | %s | %s" % (self.pinyinWord, self.user, self.date, self.learned) 
    pinyinWord = models.ForeignKey(Pinyin)
    user = models.ForeignKey(User)
    date = models.DateField()
    learned = models.BooleanField()

我是django和编程的新手,我想为Model Learned添加一个值,但前提是它还没有被添加到针对特定用户的Learned中,但似乎不能确切地掌握如何做到这一点。在

例如,我想从拼音中获取一个值,如果拼音.id以及用户id不在已学习的模型中,则将该单词添加到已学习的模型中,并将用户id、今日日期和已学设置为False/0。在


Tags: 用户selfidmodelmodelsdeflengthmax
2条回答

我希望你看到的是:

uid = User.objects.get(username='Greg').id
pinyin = Pinyin.objects.get(pinyinWord='kuai')

learned, created = Learned.objects.get_or_create(pinyinWord=pinyin.pinyinWord, 
                                                                 user__id=uid)
if created:   # newly INSERTed Learned  instance
     learned.date = datetime.date.today()
     learned.learned = False
     learned.save()

Model.objects.get_or_create方法首先尝试一个模型.objects.get使用提供的参数调用。如果失败,将创建对象,并且created将为True,否则created为False。在

因为这是对两个字段的精确查找(例如,不是拼音单词帴u包含的),所以当没有学习实例满足这两个字段时,它将失败。然后它就被创造出来了。在

之后,您可以设置日期等并保存实例。在

您可以使用model meta选项unique_together

class Learned(models.Model):
    pinyinWord = models.ForeignKey(Pinyin)
    user = models.ForeignKey(User)
    date = models.DateField()
    learned = models.BooleanField()
    class Meta:
        unique_together = ('user', 'pinyinWord')

相关问题 更多 >