将项目添加到 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】:

您不应该寻找自动重启服务器的解决方案(这通常不是一个好主意!)。相反,您应该更改您的代码,这样您就不需要重新启动服务器。

填充DOCCOURSE 元组的代码只执行一次,因为您放置它的位置。当 Django 首次加载应用程序时,直接放入 models.py 文件中的所有内容(即不存在于函数或类中)只执行一次。

查看您的代码,您可能应该将product CharFields 替换为ForeignKeys。这样你就根本不需要DOCCOURSE 元组——Django 在创建ModelForm 时会自动生成ForeignKey 的选项列表。无论如何,由于许多其他原因,将其他对象的 ID 保存在 CharField 中是很奇怪和次优的。

如果你真的觉得你需要使用带有可能选择列表的动态元组(但是看看你的代码,在这种情况下你真的不应该!)阅读这个问题的答案:Creating a dynamic choice field。

【讨论】:

以上是关于将项目添加到 Django 中的元组元组后是不是可以重新启动服务器?的主要内容,如果未能解决你的问题,请参考以下文章

元组--补充

元组--补充

python的元组及其书写规矩

Python3 typehints - 传入类型元组后,指定返回值是这些类型实例的元组

元组tuple

使用 AliasableEvalFunc 并在 Java UDF 中读取一组元组