models.py
from django.db import models
class person(models.Model):
name = models.CharField(max_length=100, blank=true)
characteristics = models.ManyToManyField(characteristics, default = '', on_delete=models.SET_DEFAULT)
def __str__(self):
return self.name
class characteristics(models.Model):
name = models.CharField(max_length=100, blank=true)
def __str__(self):
return self.name
我对queryset有一些麻烦。我创造了三个人:吉姆,约翰,杰克。然后创造四个特征:力量、敏捷性、智慧、智慧--用力量和敏捷性连接吉姆(他强壮而灵巧)--用智慧和智慧连接约翰(他是个聪明人)--用力量、敏捷、智慧、智慧连接杰克(他是各行各业的杰克)
产出如下:
Jim: strength, agility
John: wisdom, intelligence
Jack: strength, agility, wisdom, intelligence
是否有可能为这些特征添加值?例如:
Jim: strength=10 , agility=10
John: wisdom=10, intelligence=10
Jack: strength=9, agility=8, wisdom=8, intelligence=9
我认为,这个值需要存储在"person“表中。我可以在models.py中创建附加字段,但我的目标是在创建新字符时在"person“模型中创建附加字段。
有一种方法可以在"person“模型中使用0.1000个空int字段,然后给出额外的数字(如id),然后将该特征id与"person”0.1000个空字段连接起来
from django.db import models
class person(models.Model):
name = models.CharField(max_length=100, blank=true)
characteristics = models.ManyToManyField(characteristics, default = '', on_delete=models.SET_DEFAULT)
char0 = IntegerField(blank=True)
...
char1000 = IntegerField(blank=True)
def __str__(self):
return self.name
class characteristics(models.Model):
name = models.CharField(max_length=100, blank=true)
additional_id = models.BigAutoField
def __str__(self):
return self.name
有什么好办法解决我的问题吗?
发布于 2018-04-21 11:42:59
找到了4种解决方案。
第一(我应该用它,因为我没有足够的时间,也没有找到其他合适的方法):
models.py
from django.db import models
class person(models.Model):
name = models.CharField(max_length=128, blank=False)
characteristics = models.ManyToManyField(characteristics,
null=True,
on_delete=models.SET_NULL)
characteristics1 = models.FloatField(blank=True, null=True)
....
characteristics20 = models.FloatField(blank=True, null=True)
class characteristics(models.Model):
name = models.CharField(max_length=100, blank=true)
additional_id = models.BigAutoField
在创建新的特性对象之后,对象将获得additional_id(从1开始)。Lateron将特征与person.characteristicsX连接,其中(X = characteristics.additional_id)。然后,我们可以调用对象,并通过characteristicsX进行排序(其中X= characteristics.additional_id)
第二名:
models.py
from django.db import models
class person(models.Model):
name = models.CharField(max_length=128, blank=False)
characteristics = models.ManyToManyField(characteristics,
null=True,
on_delete=models.SET_NULL)
characteristics1_type = models.ForeignKey('characteristics', blank=True, null=True, on_delete=models.SET_NULL)
characteristics1_value = models.FloatField(blank=True, null=True)
....
characteristics20_type = models.ForeignKey('characteristics', blank=True, null=True, on_delete=models.SET_NULL)
characteristics20_value = models.FloatField(blank=True, null=True)
class characteristics(models.Model):
name = models.CharField(max_length=100, blank=True)
可能会造成麻烦,因为用户可以设置两个相同的特性。但还是有办法禁止它使用表格等。
第三:
models.py
from django.db import models
class person(models.Model):
name = models.CharField(max_length=128, blank=False)
characteristics = models.models.TextField(blank=True)
class characteristics(models.Model):
name = models.CharField(max_length=100, blank=True)
然后使用表单将值保存到person.characteristics字段。这种方法仍然可以工作,但是它需要通过TextField通过charecteristics.objects对信息进行排序。这将需要一些时间来设置好,但会工作很棒。
4:使用postgreSQL并存储一个数组。
发布于 2018-04-20 19:15:32
我觉得你应该试试这样的方法:
class characteristics(models.Model):
id = models.AutoField(primary_key=True, )
name = models.CharField(max_length=100)
parameter = models.SmallIntegerField(default=0)
接下来,您可以:
Jim = person.objects.get(name = Jim)
jims_str = characteristics.objects.create(name = "strengh", parameter = 5)
jims_wisdom = characteristics.objects.create(name = "wisdom", parameter = 2)
Jim.characteristics.add(jims_str)
Jim.characteristics.add(jims_wisdom)
Jim.save()
我可以忽略一些细节,但主要的逻辑可能是这样的。不同的特性(良好的做法是用首都命名类名,后者在Python中)可能具有相同的名称,但具有惟一的PrimaryKey,并且将通过M2M关系连接到Person模型。
方法2:
您可以编辑Person
如下:
class Person(models.Model):
id = models.AutoField(primary_key=True, )
name = models.CharField(max_length=100)
strength = models.ForeignKey('Strength', blank=True, null=True, on_delete=models.SET_NULL)
agility= models.ForeignKey('Agility', blank=True, null=True, on_delete=models.SET_NULL)
intelligence= models.ForeignKey('Intelligence', blank=True, null=True, on_delete=models.SET_NULL)
wisdom= models.ForeignKey('Wisdom', blank=True, null=True, on_delete=models.SET_NULL)
接下来创建4个模型:Strength, Agility, Wisdom, Intelligence
class Strength(models.Model):
id = models.AutoField(primary_key=True, )
parameter = models.SmallIntegerField(default=0)
https://stackoverflow.com/questions/49945364
复制相似问题