これまでずっと奇妙なエラーが発生しています。私たちのデベロッパーチームはこの二日間、これを実行していたので、それを乗り越えることはできません。Django QuerySet TypeError
def get_custom_fields(self, obj):
custom_fields = obj.company.ticketcustomfieldtype_set.all()
return [{
'id': field.id,
'name': str(field.name),
'type': field.type,
'value': obj.custom_fields[str(field.id)] if str(field.id) in obj.custom_fields else None
} for field in custom_fields]
custom_fields
通常のDjangoのクエリセット
今奇妙なことがあります::
は、我々は、以下の機能を備えた当社のDRF・シリアライザを持っているローカルホスト上で、これはうまく動作します。リモートでは、QuerySetが空の場合にのみ正常に動作します。その中に何かがあれば、我々は次のエラーを取得する:
はTypeError:文字列のインデックスはcustom_fields
が現在の文字列であることが表示されます、整数
でなければなりません。ローカルにそれだけで正常に動作しますので、私たちは
- DjangoはPythonの3.4.3
- DRF 3.6.4 1.11.5
- ...、
- のPostgres 9.6.5
感謝すべてのヘルプ、必死:(
EDIT:
TicketCustomFieldTypeモデル:
class TicketCustomFieldType(models.Model):
TICKET_CUSTOM_FIELD_TYPES = (
('CHAR', _('Text field')),
('DATE', _('Date field'))
)
TICKET_DEFAULT_CUSTOM_FIELD_TYPE = 'CHAR'
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
company = models.ForeignKey(
to=Company,
verbose_name=_('Company')
)
name = I18nCharField(
verbose_name=_('Name'),
max_length=80,
)
type = models.CharField(
verbose_name=_('Field type'),
max_length=20,
choices=TICKET_CUSTOM_FIELD_TYPES,
default=TICKET_DEFAULT_CUSTOM_FIELD_TYPE,
help_text=_('In this field, you can store either text, or date value.'),
)
priority = models.IntegerField(default=0)
チケットモデル(略称):
from django.contrib.postgres.fields import JSONField
from django.core.serializers.json import DjangoJSONEncoder
(...)
class Ticket(models.Model):
(...)
custom_fields = JSONField(encoder=DjangoJSONEncoder, default=dict, verbose_name=_('Custom fields'))
def get_custom_field(self, field_type):
qs = self.customfields.filter(type=field_type)
if qs.exists():
return qs.first()
new_field = TicketCustomField()
new_field.ticket = self
new_field.type = field_type
new_field.save()
return new_field
def get_all_custom_fields(self):
custom_fields = []
for type in self.company.ticketcustomfieldtype_set.all():
custom_fields.append(self.get_custom_field(type))
return custom_fields
EDIT 2:
のPython 3.6にアップグレードした後、この問題は、コードへの変更を修正しないしまっ...
ですので、これはあなたにそれを追加することができ、あります質問? – Daniel
このエラーは、 'obj.custom_fields'はリストであり、辞書ではないことを示しています。したがって、 'obj.custom_fields [1]'は実行できますが、 'obj.custom_fields [str(1)]'はエラーを返します。 – Alasdair
ありがとうございます。私はモデルを追加しました。 – petr