كيفية إنشاء التسلسل الهرمي للنماذج؟

0

كيف يمكنني عمل تسلسل هرمي في django؟ أريد إنشاء شجرة أشخاص. أدرك أنه يجب عليَّ إضافة حقل أصل إلى نموذج الشخص. ما الذي أحتاجه لتغيير النموذج والعرض؟ كما أريد استخدام عرض الشجرة لتمثيل التسلسل الهرمي.

Imagen 23137

class Person(models.Model):
    name = models.CharField(max_length=40)

    def __str__(self):
        return self.name

def add_person(request):
    if(request.method == 'POST'):
        name = request.POST['name']
        person = Person(name=name)
        person.save()

        return redirect('/persons')
    else:
        return render(request, 'add_person.html')

1 إجابة

0

إذا أضفت مفتاحًا خارجيًا إلى الوالد ، يمكنك بسهولة إنشاء heirachy

class Person(models.Model):
    name = models.CharField(max_length=40)
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')

    def __str__(self):
        return self.name

def add_person(request):
    if(request.method == 'POST'):
        name = request.POST['name']
        parent_id = request.POST.get('parent_id')
        person = Person(name=name, parent_id=parent_id)
        person.save()

        return redirect('/persons')
    else:
        return render(request, 'add_person.html')

للحصول على جميع أطفال شخص يمكنك القيام به ببساطة

person = Person.objects.get(id=p_id)
person.children.all()

لست متأكدًا مما إذا كان هناك برنامج TreeView مضمّن ولكن يمكنك دائمًا بناؤه

# view
def tree_view(request):
    people = Person.objects.prefetch('children')
    return render(request, 'template.html', {'people': people})

# template
<ul>
{% for person in people %}
    <li>
        {{ person.name }}
        <ul>
        {% for child in person.children.all %}
            <li>{{ child.name }}</li>
        {% endfor %}
        </ul>
    </li>
{% endif %}
</ul>

بالطبع يمكنك إنشاء قوالب متعددة واستخدام يتضمن لجعلها متكررة بحيث يمكنك الحصول على n أجيال

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام