2016-05-02 157 views
0

我有我希望的是一個簡單的問題。Django關係數據庫模型

我正在製作一個像jjTree和django一樣使用樹狀結構的應用程序。目前,樹中的每個節點都有自己的對象,但我需要多棵樹,因此我正在尋找將一棵樹的所有節點與另一個對象進行關聯,該對象將代表一棵具有其中所有節點的整棵樹。

希望以上是有道理的。從我可以告訴我需要一個外鍵關係節點和整個樹對象/模型。理想情況下,有人可能會指出如何正確編寫foreignkey關係,然後如何實例化客戶端上的fulltree對象?

謝謝你的任何幫助和建議。

更新代碼: 型號

from django.db import models 

class StoringJSON(models.Model): 
    parent = models.CharField(null=True, max_length=50) 
    id = models.CharField(primary_key=True, max_length=50, unique=True) 
    text = models.CharField(null=True, max_length=50) 
    tree = models.Foreignkey(FullTree) 

class FullTree(models.Model): 
    pass 

串行

from rest_framework import serializers 
from treetool.models import StoringJSON 
from django.contrib.auth.models import User 

class TreeSerializer(serializers.ModelSerializer): 
    owner = serializers.ReadOnlyField(source='owner.username') 

    class Meta: 
     model = StoringJSON 
     fields = ('id', 'text', 'parent') 

查看

from django.shortcuts import render 
from django.contrib.auth.decorators import login_required 
from django.db import models 


@login_required 
def tree(request): 
    return render(request, 'treetool/tree.html') 


from treetool.models import StoringJSON 
from treetool.serializers import TreeSerializer 

from rest_framework import generics 


class TreeList(generics.ListCreateAPIView): 
    queryset = StoringJSON.objects.all() 
    serializer_class = TreeSerializer 

class TreeDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = StoringJSON.objects.all() 
    serializer_class = TreeSerializer 
+0

你試過Google搜索「Django外鍵」嗎? –

+0

是的 - 我知道我需要創建一個指向另一個模型的外鍵屬性,但我不知道如何在此之後使用它 – Kevin

+0

發佈您迄今爲止的代碼。 –

回答

0

對於具有樹樣的關係,可以很好地使用優秀django-mptt模塊。這個軟件包的功能就是這樣。

可以說你是一個「根節點」的節點,你可以在它下面有n個節點,所有這些都使得你的樹A。現在讓我們說你想要在樹的所有這些節點附加到一個記錄。所以你所要做的就是取這棵樹的根A,並且只把這個特殊的('root')作爲外鍵。所以現在,你有一個樹根A作爲其外鍵的記錄。

接下來,要檢索該樹中的所有節點,只需在該根實例上調用get_descendants()方法,該實例只是您創建了外鍵。瞧,你有你的整棵樹。

接下來,來到您的客戶端部分,您將不得不加載mptt_tags位於您想要遍歷此樹的模板的頂部。您必須通過數組中的所有節點,其中位於零索引處的節點是樹的根節點。您可以通過使用

nodes = root.get_descendants() nodes.insertAt(0, root)

現在,還有就是你可以用它來遍歷樹節點模板美麗recursetree templatetag構建該陣列。另外,請參閱文檔以瞭解如何通過擴展MPTTModel來使您的模型具有樹的關係。道歉,如果我的例子不是很好,我並不擅長舉例:D,並希望它有幫助。