1

私の問題はこれです。

たとえば、次のコード。コンソールに、モデル「ModelB」が見つからないというエラーが表示されます。

class modela(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=360)

    def print_name_modelb(self):
        modelb = modelb.objects.get(id=1)
        print modelb.name

class modelb(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=360)

認識の場合、関数で使用するすべての空のモデルを設定する方法はありますか?


実際のデータで編集します。

class Vip2ProductosPlantilla(models.Model):
    id = models.IntegerField(primary_key=True)
    nombre = models.CharField(max_length=360)
    referencia = models.CharField(max_length=300)
    intro = models.TextField()
    descripcion = models.TextField()
    precio_tienda = models.DecimalField(max_digits=12, decimal_places=2)
    precio_vip = models.DecimalField(max_digits=12, decimal_places=2)
    precio_cesion = models.DecimalField(max_digits=12, decimal_places=2)
    zoom = models.BooleanField()
    id_marca = models.ForeignKey(Vip2Marcas, null=True, db_column='id_marca', blank=True)
    categoria = models.ManyToManyField(Vip2Categorias)
    stock  = models.IntegerField(null=True, blank=True, default=0)
    last_update = models.DateTimeField(auto_now=True)
    gastos_envio = models.DecimalField(max_digits=12, decimal_places=2,blank=True,null=True)

    def get_precio(self):
        try:
            precio = MLPreciosProductos.objects.filter(plantilla=self)[0]
            if (precio != None) & (precio.precio_ml > 0):
                print 'precio ml'
                return precio.precio_ml
            else:
                print 'precio vip'
                return self.precio_vip
        except:
            print 'precio vip error'
            return self.precio_vip

class MLPreciosProductos(models.Model):
    id = models.AutoField(primary_key=True)
    plantilla = models.ForeignKey(Vip2ProductosPlantilla,null=True, db_column='plantilla', blank=True)
    precio_ml = models.DecimalField(max_digits=12, decimal_places=2)
    campana = models.ForeignKey(Vip2Campanas, null=True, db_column='campana', blank=True)

テンプレート関数が get_precio を呼び出すと、例外がスローされます


Traceback:
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/opt/marketland.es/web/marketland/views.py" in outlet_campana
  127.         context_instance=RequestContext(request))    
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
  188.         return t.render(context_instance)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in render
  123.             return self._render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  127.         return compiled_parent._render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  127.         return compiled_parent._render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  64.             result = block.nodelist.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  64.             result = block.nodelist.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  227.                 nodelist.append(node.render(context))
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/debug.py" in render
  90.             output = self.filter_expression.resolve(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in resolve
  510.                 obj = self.var.resolve(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in resolve
  653.             value = self._resolve_lookup(context)
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/template/base.py" in _resolve_lookup
  698.                             current = current()
File "/home/opt/marketland.es/web/marketland/models.py" in get_precio
  201.         precio = MLPreciosProductos.objects.filter(plantilla=self)[0]
File "/home/opt/ENV-django/local/lib/python2.7/site-packages/django/db/models/query.py" in __getitem__
  190.             return list(qs)[0]

Exception Type: TemplateSyntaxError at /outlet/atornillador-blackampdecker-pilas-aaa-558/
Exception Value: Caught IndexError while rendering: list index out of range
4

2 に答える 2

0

それを解決する 1 つの方法は、同じファイル内でmodelbbeforeを定義することです。modelaPython はスクリプト言語であり、1 行ずつ実行されるためmodelb、例で参照すると、まだ存在しません。
ただし、 で 2 つのモデルを相互に参照する必要がある場合があります。ForeignKeyそのような場合は、モデルの名前を文字列として渡すことができます。

 campana = models.ForeignKey('Vip2Campanas')

問題を引き起こす可能性のあるもう 1 つのことは、オブジェクトを次のようにフィルタリングすることです。

MLPreciosProductos.objects.filter(plantilla=self)

オブジェクトは動的に変化する可能性があり、実際にはポインターであるため、次のように ID でオブジェクトを識別する方が適切です。

MLPreciosProductos.objects.filter(plantilla_id=self.id)

または、django が舞台裏で作成する逆ルックアップを使用します。

Foo(models.Model):
    pass

Bar(models.Model):
    foo = models.ForeignKey('Foo')

# instance of a Foo model is given 'hidden' field bar_set 
foo.bar_set

(modelname)_set自動的に追加され、外部キーによってオブジェクトにリンクされたすべてのエントリのリストを取得できます。

于 2015-06-08T16:54:52.053 に答える
-1

あなたの最後のコメントに基づいて、

precio = MLPreciosProductos.objects.filter(plantilla=self)[0]「私は再び編集しました。しかし、それを作成または検索しようとしたため、現在、障害が発生しています」

クラスで定義されている限り、self変更を試みるだけでフィルタリングすることはできないと思いますself.idself.nombre私の悪い英語を許してください、ただ助けようとしています

于 2012-11-12T11:47:45.827 に答える