简体   繁体   中英

python code for django view

MODEL:

class Pathology(models.Model):
    pathology = models.CharField(max_length=100)

class Publication(models.Model):
    pubtitle = models.TextField()

class Pathpubcombo(models.Model):
    pathology = models.ForeignKey(Pathology)
    publication = models.ForeignKey(Publication) 
  1. List of pathology sent to HTML template as drop down menu

VIEW:

def search(request):
    pathology_list = Pathology.objects.select_related().order_by('pathology')
  1. User selects one pathology name from drop down menu and id retrieved by

VIEW:

def pathology(request):
    pathology_id = request.POST['pathology_id'] 
    p = get_object_or_404(Pathology, pk=pathology_id)

Where I'm stuck. I need the python/django syntax to write the following:

The pathology_id must now retrieve the publication_id from the table Pathpubcombo (the intermediary manytomany table). Once the publication_id is retrieved then it must be used to retrieve all the attributes from the publication table and those attributes are sent to another html template for display to the user.

you should be using many-to-many relations as described here: http://www.djangoproject.com/documentation/models/many_to_many/

Like:

class Pathology(models.Model):
    pathology = models.CharField(max_length=100)
    publications = models.ManyToManyField(Publication)

class Publication(models.Model):
    pubtitle = models.TextField()

Then

def pathology(request):
    pathology_id = request.POST['pathology_id'] 
    p = get_object_or_404(Pathology, pk=pathology_id)
    publications = p.publications.all()
    return render_to_response('my_template.html',
                              {'publications':publications},
                              context_instance=RequestContext(request))

Hope this works, haven't tested it, but you get the idea.

edit:

You can also use select_related() if there is no possibility to rename tables and use django's buildin support.

http://docs.djangoproject.com/en/dev/ref/models/querysets/#id4

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM