Вопрос об иерархии данных Django

#python #django

#python #django

Вопрос:

Я новичок в Django, и я пытаюсь построить иерархию данных, которая следует этому шаблону:

Там будет несколько Сообществ — скажем, Huntsville , Phoenix и Madison .

Каждое из этих сообществ сможет иметь несколько отличных друг от друга Categories . Например, Huntsville может иметь Hunting , fishing и skiing — и Phoenix может иметь запущенный, biking и swimming . Тогда каждая из конкретных категорий будет иметь несколько различных подробных представлений. Я пытался сделать так, чтобы это произошло с:

 from django.db import models

class Community(models.Model):
    name = models.CharField(max_length=200) #arbitrary max length

class Category(models.Model):
    community = models.ForeignKey(Community)
    category = models.CharField(max_length=200) #arbitrary max length

class Detail_View(models.Model):
    category = models.ForeignKey(Category)
    detailView = models.CharField(max_length=200) #arbitrary max length
    website = models.CharField(max_length=200) #arbitrary max length
  

но, похоже, на самом деле это работает не совсем правильно, и я не могу до конца понять, почему.

Есть мысли?

Ответ №1:

Я не уверен, что полностью понимаю поведение, которого вы ждете, но в любом случае у меня есть несколько советов.

Во-первых, похоже, что вы реализуете соотношение «один ко многим», когда вам действительно нужно соотношение «многие ко многим».

Проверьте http://docs.djangoproject.com/en/1.3/ref/models/relations /

По этой ссылке используйте models.ManyToManyField вместо models.ForeignKey

Также, если вы хотели определить это как отношение «один ко многим», вы, вероятно, не хотите Category ссылаться Community . Используйте фразу «имеет а» или «имеет много», чтобы определить это. Поскольку a Community «имеет a» Category , ForeignKey (или ManyToManyField ) должно быть определено на Community модели, а не на Category одной.

Я бы настоятельно рекомендовал взглянуть на свободно доступный проект Django Book, особенно на главу о продвинутых моделях

Надеюсь, это поможет!