django - Django:使用模型方法分配默认值(使用self)
问题描述
我正在寻找使用模型内部的方法分配默认值:
class Discussion(models.Model):
# attributes ...
def __str__(self):
return str(self.id) + ". " + self.title
def class_name(self):
return self.__class__.__name__
discussion_type = models.CharField(max_length = 50, default = self.class_name())
class TechDiscussion(Discussion):
# ...
class ScienceDiscussion(Discussion):
# ...
在我的 Django 应用程序中,用户只能创建科学或技术讨论。因此discussion_type
应该是"TechDiscussion"
or "ScienceDiscussion"
。
服务器返回错误NameError: name 'self' is not defined
,指的是分配给的默认值discussion_type
。
解决方案
正如 Bear Brown 在评论中建议的那样,解决方案是覆盖类的save()
方法Discussion
,也记录在此处。我删除了discussion_type
分配并添加了覆盖,如文档中所示:
class Discussion(models.Model):
# attributes ...
def __str__(self):
return str(self.id) + ". " + self.title
def class_name(self):
return self.__class__.__name__
def save(self, *args, **kwargs):
self.call_type = self.class_name()
super().save(*args, **kwargs)
推荐阅读
- salt-stack - saltstack 中是否有“什么都不做”或“通过”语句?
- python - Fiona:名称“rec”未定义
- python - 使用 tkinter 跟踪画布上每个多边形的每个点
- javascript - 本地存储设置为 Javascript 中的下拉菜单
- typescript - 如何使 Next.js getStaticProps 与打字稿一起使用
- rust - 如何将受特征限制的类型传递给 Serde 的 deserialize_with?
- linux - 是:BPF 如何计算 PERCPU_ARRAY 的 CPU 数量?
- browser - 如何检测数据包丢失 GStreamer - webrtcbin(以及如何发送 PLI 或 FIR)
- android - 使用 ViewPager2 自定义选项卡布局
- java - Android Studio APP 构建成功但无法运行