2014-03-12 74 views
0

我想弄清楚我要如何'CRUD'項目的順序,我在一個組中存儲在數據庫中。 (僞聲明:選擇*應用程序中的項目,其中group_id = 1;)跟蹤項目順序存儲和從數據庫檢索

我的猜測是,我只是使用數字字段,隨着更多項目添加到組中或從中刪除,我只是增加/減少數字。我可以隨時更新此字段中的物品編號,因爲它們都是移動的。不過,我已經看到了這個真的走在舊的遺留應用程序嚴重錯誤,其中的項目將獲得不同步的,你就會有一個羣裏的順序弄成這個樣子的東西:

0,1,1,3,4,5 
0,1,1,1,4,5 

這不是由應用程序非常優雅地處理,並且破壞了需要手動干預的應用程序來重新排序數據庫中的項目。

有沒有辦法避免這個陷阱?

編輯:我也可能想要多個訂單的多個組中可用的項目。 我認爲在這種情況下,我需要一個多對多的關係,用於組對物品關係和物品到訂購的關係。 /編輯

我會在Django框架中這樣做。

回答

0

我不太確定你在問什麼;因爲排序是一回事,而相關對象的分組完全是另一回事。

數據庫不存儲事物的順序,而是存儲事物的關係(分組)。事物的順序是用戶界面的細節,而不是數據庫應該使用的東西。

在django中,您可以創建ManyToMany關係。這基本上創建了一個「框」,您可以在其中添加和刪除與特定模型相關的項目。下面是從documentation的例子:

from django.db import models 

class Publication(models.Model): 
    title = models.CharField(max_length=30) 

    # On Python 3: def __str__(self): 
    def __unicode__(self): 
     return self.title 

    class Meta: 
     ordering = ('title',) 

class Article(models.Model): 
    headline = models.CharField(max_length=100) 
    publications = models.ManyToManyField(Publication) 

    # On Python 3: def __str__(self): 
    def __unicode__(self): 
     return self.headline 

    class Meta: 
     ordering = ('headline',) 

下面的文章可以屬於多個刊物和出版物都與他們相關聯的一個或更多文章:

a = Article.create(headline='Hello') 
b = Article.create(headline='World') 
p = Publication.create(title='My Publication') 

p.article_set.add(a) 
p.article_set.add(b) 
p.save() 

# You can also add an article to a publication from the article object: 

c = Article.create(headline='The Answer is 42') 
c.publications.add(p) 

知道有多少文章屬於出版物:

Publication.objects.get(title='My Publication').article_set.count() 
+0

對不起,我猜這在我的腦海裏是不清楚的,這就是爲什麼我在努力寫作中苦苦掙扎。 我想存儲訂單狀態,以便爲用戶提供特定的物品訂單(與日期,字母字段或物品ID無關)。複雜的因素是將物品放在多個組中。 – richardnpaul

+0

假設您的文章標題爲'您好' '至' '我們的' '好友',並且您希望每次都按順序顯示它們。 ID分別爲2,4,3,1,添加的日期將跟隨ID。你不能通過id,datetime或按字母順序排列它們,但是你希望你的訪問者在輸出'Publication.objects.get(title ='My Publication')時看到原來的順序。article_set.all()'而不是'朋友','你好','我們','到'。在模板中,您需要使用某些功能將演示文稿訂購給最終用戶,而無需按照您的首選順序手動輸出每個項目的ID。 – richardnpaul

相關問題