我想为 django 模型创建一个新类型的字段,它基本上是一个 ListOfStrings。因此,在您的模型代码中,您将具有以下内容:
模型.py:
from django.db import models
class ListOfStringsField(???):
???
class myDjangoModelClass():
myName = models.CharField(max_length=64)
myFriends = ListOfStringsField() #
其他.py:
myclass = myDjangoModelClass()
myclass.myName = "bob"
myclass.myFriends = ["me", "myself", "and I"]
myclass.save()
id = myclass.id
loadedmyclass = myDjangoModelClass.objects.filter(id__exact=id)
myFriendsList = loadedclass.myFriends
# myFriendsList is a list and should equal ["me", "myself", "and I"]
根据以下规定,您将如何编写此字段类型?
- 我们不想创建一个将所有字符串塞在一起并在一个字段中用标记将它们分开的字段,例如this http://www.davidcramer.net/code/181/custom-fields-in-django.html。在某些情况下这是一个很好的解决方案,但我们希望保持字符串数据标准化,以便 django 以外的工具可以查询数据。
- 该字段应自动创建存储字符串数据所需的任何辅助表。
- 理想情况下,辅助表应该只有每个唯一字符串的一个副本。这是可选的,但如果有的话那就太好了。
查看 Django 代码,看起来我想要做一些类似于foreignkey正在做的事情,但文档很少。
这导致了以下问题:
- 这可以做到吗?
- 已经完成了吗(如果是的话,在哪里完成)?
- Django 上有关于如何扩展和重写其模型类(特别是其关系类)的文档吗?我还没有看到很多关于他们的代码这方面的文档,但是有this http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#howto-custom-model-fields.
这是来自这个question https://stackoverflow.com/questions/1110153/what-is-the-most-efficent-way-to-store-a-list-in-the-django-models.
有一些关于创建自定义字段的非常好的文档here http://docs.djangoproject.com/en/dev/howto/custom-model-fields/.
不过,我认为你想太多了。听起来您实际上只想要一个标准外键,但具有将所有元素作为单个列表检索的附加功能。所以最简单的事情就是使用外键,并定义一个get_myfield_as_list
模型上的方法:
class Friends(model.Model):
name = models.CharField(max_length=100)
my_items = models.ForeignKey(MyModel)
class MyModel(models.Model):
...
def get_my_friends_as_list(self):
return ', '.join(self.friends_set.values_list('name', flat=True))
现在打电话get_my_friends_as_list()
MyModel 的实例将根据需要返回一个字符串列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)