2015-07-01 3 views
0

У меня есть модель с внешним ключом, позволяющая ссылаться на произвольное количество других моделей. Поэтому я могу добавлять и удалять с помощью интерфейса администратора, но как я могу сделать это эквивалентно программно?Добавление моделей в Django Foreign Key

class Json(models.Model): 
    data = models.TextField() 

class Dweet(models.Model): 
    name = models.CharField(max_length = 300) 
    data = models.ForeignKey(Json) 

enter image description here

ответ

1

Для того, чтобы использовать эти модели вы можете сделать следующее:

>>> from app.models import Json, Dweet 
>>> a = Json(data="asdf") 
>>> a.save() 
>>> b = Dweet(name="Test", data=a) 
>>> b.save() 
>>> c = Dweet(name="Test2", data=a) 
>>> c.save() 

После того, что вы в конечном итоге с одного объекта Json и объекты две Dweet что и точка сказал Json объект. Это примерно так же интересно, как и с двумя моделями, которые вы нам показали. Вы можете добавить больше объектов Json, если хотите, конечно, но каждый Dweet может указывать только на одного Json (не уверен, что вы спрашивали что-то другое в своем вопросе).

+0

Несколько объектов 'Json' в' Dweet', как показано в раскрывающемся списке. –

+2

На самом деле вы не ставите несколько Json's в одном Dweet, это дает вам выбор, который Json ставит в Dweet. Если вам нужно несколько Json's в данном Dweet, вам нужно либо поставить ForeignKey в Json, а не Dweet (сделает Json неперемещаемым) или использовать ManyToManyField (https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many /) – CrazyCasta

+0

Спасибо, сумасшедшая Коста за разъяснение. Я задавал этот вопрос три раза, страдал многочисленными ненужными downvotes, и, наконец, я достиг ответа. –

0

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

На самом деле один вариант не отображается дважды в раскрывающемся списке, а представляет собой два объекта модели, хранящихся в таблице Json, то есть как вы указали Json как внешний ключ. поэтому каждый раз, когда вы загружаете форму, он запрашивает запрос (например, select * from Json). поэтому в ответ он получит объекты модели (количество отдельных строк в соответствующей таблице моделей). Поэтому вам нужно указать метод unicode unicode() для отображения значения атрибута объекта только на месте Json Object. Так что если вы пишете метод, как

class Json(models.Model): 
    data = models.TextField() 

    def __unicode__(self): 
    return self.data 

Вы получите данные, хранящиеся в модели объекта т.е. данных.

+0

Это не проблема. Меня не интересует строковое представление. –