将项目添加到 Django 中的元组元组后是不是可以重新启动服务器?
Posted
技术标签:
【中文标题】将项目添加到 Django 中的元组元组后是不是可以重新启动服务器?【英文标题】:Is possible to restart server after adding an item into a tuple of tuples in Django?将项目添加到 Django 中的元组元组后是否可以重新启动服务器? 【发布时间】:2014-05-29 21:27:52 【问题描述】:我有这些空的元组列表(DOC 和 COURSE),当产品被保存时,稍后会添加到他的特定列表中
CATEGORY = (
('DOC','DOCUMENTAZIONE'),
('COURSE','CORSO'),
)
class Product(BaseModel):
class Meta:
verbose_name=_('Prodotto')
verbose_name_plural=_('Prodotti')
name = models.CharField(_("Nome Prodotto"),max_length=1024, blank = False, null=True)
category = models.CharField(_("Categoria"),max_length=1024, blank = False, null=True,choices=CATEGORY)
def __unicode__(self):
return self.name
DOC = ()
COURSE = ()
try:
for product in Product.objects.all():
if product.category == 'DOC':
DOC = DOC + ((str(product.id), str(product.name.encode('utf-8'))),)
if product.category == 'COURSE':
COURSE = COURSE + ((str(product.id), str(product.name.encode('utf-8'))),)
except Exception as e:
print e
pass
class ProductOfferDoc(BaseModel):
class Meta:
verbose_name = _("Documentazione")
verbose_name_plural = _("Documentazioni")
product = models.CharField(max_length=1024, blank=False,null=False, choices=DOC)
number = models.IntegerField(_('Num.'), default=0, blank=True, null=True)
price = models.DecimalField(_('Prezzo'),max_digits=10, decimal_places=2,default=0.00,blank=True, null=True )
offer = models.ForeignKey(Offer, related_name='related_doc')
def __unicode__(self):
return self.product
class ProductOfferCourse(BaseModel):
class Meta:
verbose_name = _("Corso")
verbose_name_plural = _("Corsi")
product = models.CharField(max_length=1024, blank=False,null=False, choices=COURSE)
number = models.IntegerField(_('Num.'), default=0, blank=True, null=True)
price = models.DecimalField(_('Prezzo'),max_digits=10, decimal_places=2,default=0.00,blank=True, null=True )
offer = models.ForeignKey(Offer, related_name='related_course')
def __unicode__(self):
return self.product
我的问题是我需要显示可用的产品,但刚刚添加的新产品直到我重新启动服务器才会出现。 还有另一种方法可以做同样的事情吗?或者有添加产品时自动重启服务器的功能?
【问题讨论】:
对不起我之前的评论。我没有完全阅读这个问题。 【参考方案1】:您不应该寻找自动重启服务器的解决方案(这通常不是一个好主意!)。相反,您应该更改您的代码,这样您就不需要重新启动服务器。
填充DOC
和COURSE
元组的代码只执行一次,因为您放置它的位置。当 Django 首次加载应用程序时,直接放入 models.py 文件中的所有内容(即不存在于函数或类中)只执行一次。
查看您的代码,您可能应该将product
CharField
s 替换为ForeignKey
s。这样你就根本不需要DOC
和COURSE
元组——Django 在创建ModelForm 时会自动生成ForeignKey
的选项列表。无论如何,由于许多其他原因,将其他对象的 ID 保存在 CharField
中是很奇怪和次优的。
如果你真的觉得你需要使用带有可能选择列表的动态元组(但是看看你的代码,在这种情况下你真的不应该!)阅读这个问题的答案:Creating a dynamic choice field。
【讨论】:
以上是关于将项目添加到 Django 中的元组元组后是不是可以重新启动服务器?的主要内容,如果未能解决你的问题,请参考以下文章