Форум сайта python.su
Мне нужно связать поле модели с двумя другими моделями через ForeignKey, одна из них - моя, другая - стандартная джанговая User. Так уж получилось, что нужно в админке из одного открывающегося списка выбирать переменную либо из одной модели, либо из другой.
Мне посоветовали посмотреть на GegericRelations, но, насколько я понял, там нужно создавать еще одну модель и, соответственно, создавать переменные ее типа. Но тогда же нужно будет каждый раз, когда в систему будет добавляться новый пользователь или переменная другой модели, создавать еще одну переменную нового типа. Или я чего-то недопонимаю?
Офлайн
Покажите модели, а то так весьма трудно понять, что же Вам нужно.
Офлайн
У меня есть модель Circuit. Она описывает некоторое устройство. Есть модель стандартная модель джанги User и еще одна моя модель, которая описывает некоторые места на складе. Мне нужно, чтобы в админке из одного раскрывающегося списка я смог выбрать либо одного из пользователей, у которого хранится данное конкретное устройство, либо это самое место на складе из списка.
Думаю, приводить код моделей здесь особого смысла нет, их внутренняя организация не имеет значения в данном случае.
Офлайн
Имя, сестра, имя.
Код, брат, код!
Офлайн
from django.contrib.auth.models import User class Circuit(models.Model): circuit_id = models.PositiveIntegerField(verbose_name=_("Circuit ID"), blank=True, null=True) model = models.ForeignKey(Versiiplates, verbose_name=_("Model")) date_created = models.DateField(blank=True, null=True, verbose_name=_("Date Created"), default=datetime.date.today()) manufacturer = models.ForeignKey(Manufacturer, null=True, blank=True, verbose_name="Производитель") manufacturer_comments = models.TextField(max_length=2500, null=True, blank=True, verbose_name="Комментарии производителя") keeper = models.ForeignKey(User, null=True, blank=True, verbose_name="Хранится") status = models.PositiveIntegerField(verbose_name=_("Status"), choices=STATUS_TYPE, default=0) status_history = models.ManyToManyField(Status, blank=True, null=True) status_comment = models.TextField(max_length=2500, blank=True, null=True, verbose_name="Комментарий") def __unicode__(self): return u"%s #%d" % (self.model, self.circuit_id) class Meta: verbose_name = _("Circuit") verbose_name_plural = _("Circuits") class StoreCell(models.Model): def __unicode__(self): return u'Cell #%d' % self.pk
Офлайн
class StoreCell(models.Model): def __unicode__(self): return u'Cell #%d' % self.pk
Офлайн
Ну, в списке просто Cell и ключ объекта, как и указано в методе __unicode__(). Там ничего и не должно в модели еще быть, кроме как одно лишь число, указывающее номер ячейки. Это не имеет принципиальной важности, интересно другое: как можно связать поле модели Circuit сразу с двумя разными моделями. Причем одна из них ведь стандартная от джанги. А значит, не получится создать некую базовую модель, вроде StoreItem, от которой можно было бы наследовать две другие.
Отредактировано FishHook (Фев. 14, 2013 10:51:47)
Офлайн
empirik
Мне посоветовали посмотреть на GegericRelations, но, насколько я понял, там нужно создавать еще одну модель и, соответственно, создавать переменные ее типа.
from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic class TaggedItem(models.Model): tag = models.SlugField() content_type = models.ForeignKey(ContentType) object_id = models.PositiveIntegerField() content_object = generic.GenericForeignKey('content_type', 'object_id') def __unicode__(self): return self.tag
Отредактировано inoks (Фев. 14, 2013 10:39:10)
Офлайн
Зачем Вам модель, которая не содержит ни одного поля? Когда Вы ответите на этот вопрос мне, а может и себе, уверен что вопрос исчезнет сам собой. Есть отношения один-к-одному, многие-ко-многим, есть ссылки на ключ, чего Вы хотите я не понимаю.
Может быть начнем с начала?
Давайте попробуем построить схему данных, опишите задачу.
Отредактировано FishHook (Фев. 14, 2013 10:55:15)
Офлайн
inoksДа, я уже видел это.
Эта модель django.contrib.contenttypes.models.ContentType по умолчанию включена для всех приложений на джанго.
>>> from django.contrib.auth.models import User >>> guido = User.objects.get(username='Guido') >>> t = TaggedItem(content_object=guido, tag='bdfl') >>> t.save() >>> t.content_object <User: Guido>
FishHookПусть в модели StoreCell будет поле PositiveIntegerField, которое характеризует номер ячейки на складе. Вообще это не обязательно, если использовать стандартный джанговский ключ. Он итак при создании нового объекта будет инкрементироваться. А зачем создавать модель, в которой ничего больше нет? А потому что я вот уверен, что потом понадобится добавлять что-то еще. А добавить пару полей и мигрировать схему через south будет проще.
Зачем Вам модель, которая не содержит ни одного поля? Когда Вы ответите на этот вопрос мне, а может и себе, уверен что вопрос исчезнет сам собой. Есть отношения один-к-одному, многие-ко-многим, есть ссылки на ключ, чего Вы хотите я не понимаю. Может быть начнем с начала? Давайте попробуем построить схему данных, опишите задачу.
Отредактировано empirik (Фев. 14, 2013 11:58:37)
Офлайн