Django вопрос иерархии данных - PullRequest
4 голосов
/ 17 мая 2011

Я новичок в 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 Ответ

5 голосов
/ 17 мая 2011

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

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

Выезд http://docs.djangoproject.com/en/1.3/ref/models/relations/

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...