django:ForeignKey和实例

时间:2016-02-18 08:16:25

标签: django foreign-keys instance

我有一个模特

class Calendar(models.Model):
     name = models.CharField(_('name'), max_length=50)
     slug = models.SlugField(_('slug'), unique=True)

     def as_dict(self):
         return {
             'id': self.id,
             'name': self.name,
    }

class Event(models.Model):
 .....  
    title = models.CharField(_('titre'), max_length=100)      
    calendar = models.ForeignKey(Calendar, verbose_name=_('machine'))
在视图中,我有一个功能

 title= 'traction'
 macategorie= 'Atomisation'
 p = Event(title= untitre, calendar= macategorie)

我有错误:

  

Event.calendar必须是"日历"实例

如果我写

 p = Event(title= untitre, calendar_id= macategorie)

我有错误:

  

基数为10的int()的文字无效; '雾化'

如果我写

print 'category', p.calendar_id

我显示:雾化

目前尚不清楚

如何正确编写日历?

1 个答案:

答案 0 :(得分:2)

您应该查看django-docs

您需要先创建一个Calendar实例。 有点像这样:

title= 'traction'
macategorie= 'Atomisation'
moncalendar = Calendar.objects.create(name="Atomisation", slug="atomisation")
p = Event(title= title, calendar= moncalendar)

修改 如果你想确保Calendar对象是slug的唯一对象,请尝试:

moncalendar, created = Calendar.objects.get_or_create( slug="atomisation")
moncalendar.name = "Atomisation"
moncalendar.save()

为此,您需要将模型更改为以下内容:

name = models.CharField(_('name'), max_length=50, blank=True, default="")

name = models.CharField(_('name'), max_length=50, blank=True, null=True)

你会把它放在try-except中并处理大小写,你尝试显式添加一个带有相同slug的Calendar。 不知怎的,这样:

try:
    moncalendar = Calendar.objects.create(name="Atomisation", slug="atomisation")
except IntegrityError:
    moncalendar = Calendar.objects.get(slug="atomisation")
    moncalendar.name = "Atomisation"  # or handle differently as you like
    moncalendar.save()

有关详细信息,请参阅here