2011-04-17 168 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')