I've been banging my head against the desk for a couple weeks on this problem, so I figure it may be time to seek some help.
I'm trying to implement a database structure which has hierarchical data of parts for assemblies. My main problem lies with trying to assign one "subassembly" to another "assembly"/tree. Refering to the example trees below- I have no problem creating and working with assembly 1 and 2. But when I make assembly 3, I get multiple objects returned errors when I call up the subassemblies (which I understand base on the way I'm attempting).
assembly 1: assembly 2: assembly 3:
1.1 2.1 2.1
- 1.1.1 - 2.1.1 - 2.1.1
1.2 2.2 1.2
- 1.2.1 - 2.2.1 - 1.2.1
Here is the model I've been trying:
#models.py snippet
class Part(models.Model):
part_name = models.CharField(max_length=30, primary_key=True)
description = models.TextField(max_length=500, blank=True, null=True)
revision = models.CharField(max_length=10, blank=True, null=True)
def __unicode__(self):
return u'%s' % (self.part_name)
class Assembly(MPTTModel):
name = models.ForeignKey(Part)
parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
def __unicode__(self):
return u'%s' % (self.name)
#views.py snippet
def assembly_details(request, assembly_name):
context_instance=RequestContext(request)
assembly = Assembly.objects.get(name=assembly_name)
descendants_list = assembly.get_descendants(include_self=False)
return render_to_response('assembly_details.html', locals(), context_instance,)
So basically I'm creating very basic trees and linking to the more detailed data through the Part FK. I need to be able to query any assembly and look at it's descendants- so although I can call assembly 3,