Как работать с несохраненными many-many отношениями в django?

Возможно, вы могли бы сделать что-то вроде

starttime= time.time()

while True:
    %run "script1.py"
    time.sleep(60.0 - ((time.time() - starttime) % 60.0))
    if( (starttime - time.time()) > 240): %run "script2.py"
5
задан qollin 5 February 2009 в 22:01
поделиться

2 ответа

Я думаю, что использование django формы может быть ответом, как обрисовано в общих чертах в этой документации (поиск m2m...).

Отредактированный для добавления некоторого объяснения других людей, у которых могла бы быть та же проблема:

скажите, что у Вас есть модель как это:

from django.db import models
from django.forms import ModelForm

class Foo(models.Model):
    name = models.CharField(max_length = 30)

class Bar(models.Model):
      foos = models.ManyToManyField(Foo)

  def __unicode__(self):
      return " ".join([x.name for x in foos])

затем Вы не можете назвать unicode () на несохраненном объекте Панели. Если Вы действительно хотите распечатать вещи, прежде чем они будут сохранены, необходимо сделать это:

class BarForm(ModelForm):
    class Meta:
        model = Bar

def example():      
    f1 = Foo(name = 'sue')
    f1.save()
    f2 = foo(name = 'wendy')
    f2.save()
    bf = BarForm({'foos' : [f1.id, f2.id]})
    b = bf.save(commit = false)
    # unfortunately, unicode(b) doesn't work before it is saved properly,
    # so we need to do it this way: 
    if(not bf.is_valid()):
        print bf.errors
    else:
        for (key, value) in bf.cleaned_data.items():
            print key + " => " + str(value)

Так, в этом случае Вы, должно быть, сохранили объекты Foo (который Вы могли бы проверить прежде, чем сохранить их, с помощью их собственной формы), и прежде, чем сохранить модели со многими ко многим ключам, можно проверить их также. Все без потребности сохранить данные слишком рано и испортить базу данных или контакт с транзакциями...

4
ответ дан 13 December 2019 в 22:18
поделиться

Я добавил бы поле, которое указывает, являются ли объекты "проектом" или "живой". Тем путем они сохраняются через запросы, сессии, и т.д. и django прекращает жаловаться.

Можно затем отфильтровать объекты только показать "живые" объекты согласно общественному мнению и только показать, что "проект" возражает против пользователя, который создал их. Это может также быть расширено для разрешения "заархивированных" объектов (или любое другое состояние, которое имеет смысл).

6
ответ дан 13 December 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: