0

外部キーを介した多対多のモデル「B」があります。

class DManager(m.Manager):

    def get_by_natural_key(self, name):
        return self.get(name=name)


class D(m.Model):
    objects = DManager()
    id = m.AutoField(primary_key=True)
    name = m.CharField(max_length=250, unique=True, null=False)

    def natural_key(self):
        return (self.name)


class A(m.Model):
    id = m.IntegerField(unique=True, null=False, primary_key=True)
    name = m.CharField(max_length=250, null=True)


class B(m.Model):
    id = m.IntegerField(unique=True, null=False, primary_key=True)
    name = m.CharField(max_length=250, null=True)
    type = m.ForeignKey(D)
    bs = m.ManyToManyField(A, through='C')

    def natural_key(self):
        ## ?natural key for many-to-many?
        return(self.name, self.type.natural_key(), ?????)


class C(m.Model):
    a_id = m.ForeignKey(A)
    b_id = m.ForeignKey(B)

外部キー (BD) から関係を取得できますが、ajax.py で多対多 (BA) から関係を取得できません。

....
if request.is_ajax():
    aj_d = json.loads(request.body.decode('utf-8'))
    raw_data = serializers.serialize(
         'python', m.B.objects.filter(
          bs__a_id__in=aj_d['data']).distinct(),
    use_natural_foreign_keys=True)
    output = json.dumps(raw_data)
    return HttpResponse(output, content_type='application/json')

たとえば、values() を介して別の方法で存在する可能性があります。しかし、辞書のダンプリストに問題があります-「JSONシリアライズ可能ではありません」:

...
    raw_data = m.B.objects.filter(
              bs__a_id__in=aj_d['data']).distinct().values()
    output = json.dumps(raw_data)
4

1 に答える 1