Определить дочерний элемент по умолчанию (обратный ForeignKey) - PullRequest
1 голос
/ 28 августа 2011

У меня 2 модели Foo и Bar. Каждый Foo имеет несколько баров, но один должен быть «по умолчанию». На данный момент в Bar есть иностранная клавиша, указывающая на Foo, но теперь мне нужен способ указать, какая из принадлежностей Bar к Foo является значением по умолчанию. Я попытался установить другую внешнюю клавишу в Foo, которая указывает на Bar (с уникальным related_name), но я получаю всевозможные ошибки (в том числе в шаблонах django-admin).

Код пока:

class Foo(models.Model):
    default_bar = models.ForeignKey('Bar')

class Bar(models.Model):
    foo = models.ForeignKey(Foo)

У меня нет абсолютно НИКАКИХ проблем с совершенно новым решением, так как я, вероятно, все равно делаю это неправильно. Единственный другой способ, о котором я могу думать, - это иметь отдельную таблицу, которая соединяет Foos и Bars и имеет уникальную часть Foo, но это делает интерфейс администратора MESS.

1 Ответ

0 голосов
/ 28 августа 2011

Если у Foo может быть несколько баров, то может ли брус принадлежать нескольким барам?Если это так, то вы можете действительно легко решить эту проблему с помощью параметра ManyToManyField и through, например:

class Foo(models.Model):
    name = models.CharField(max_length=128)
    bars = models.ManyToManyField(Bar, through='FooBar')

class Bar(models.Model):
    name = models.CharField(max_length=128)

class FooBar(models.Model):
    foo = models.ForeignKey(Foo)
    bar = models.ForeignKey(Bar)
    is_default = models.BooleanField()

Проверьте документацию Django в "Дополнительные поля для многих ко многимотношения ".

И просто в качестве примечания, размещение простой версии вашей актуальной проблемы (т. е. высказывание Person и Group против Foo и Bar) помогает, так какмы лучше понимаем, что вы на самом деле пытаетесь смоделировать!Таким образом, легче понять, куда на самом деле должны идти отношения.

...