2011-04-17 129 views
0
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和编程的新手,想从模型拼音添加一个值到模型学习,但只有当它还没有被添加到该特定用户的学习中,但可以似乎没有准确掌握如何做到这一点。帮助Django模型关系

例如,我想从拼音中获取一个值,并且如果Pinyin.id和User.id还不在学习中,则将该词添加到学习模型中,其中包含用户标识,今日日期和学习设置为False/0。

+0

如果你能向我们解释你在现实生活中想表现的是什么,这将会更容易帮助你,因为我没有线索。 – 2011-04-17 16:16:28

+0

对不起,我的坏。所以拼音是使用字母数字字符的中文字。我想为学习模型添加拼音字词,但前提是用户在学习模型中没有该字词。学习模型应该保存人们正在学习的所有拼音字,然后当人们学习单词时,他们点击一个按钮,并将其学习设置为True/1 – 2011-04-17 16:25:03

+0

我将+1 jammon。如果你想使这个透明,使用manytomanyField并声明学习'throught'模型。 – 2011-04-17 16:33:10

回答

0

我希望这是你在找什么:

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方法首先尝试一个Model.objects.get通话与提供的参数。如果失败,则创建对象创建的将为True,否则创建的为False。

因为这是一个精确查找(不是pinyinWord__包含例如)这两个领域,它会失败,当没有Learned实例满足这两个领域。然后它被创建。

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

+0

我认为这是我正在寻找的更多!要尝试一些事情然后回到你身边。谢谢你们! – 2011-04-17 16:50:05

1

你可以使用模型元选项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')