2017-08-01 1 views
2

Je ces deux modèles:intérieur se joindre à Django 1.9

class ModelInteractions(models.Model): 
    id1 = models.IntegerField(primary_key=True) 
    id2 = models.IntegerField() 
    comm = models.TextField(blank=True, null=True) 

    class Meta: 
     managed = False 
     unique_together = (('id1', 'id2'),) 


class Models(models.Model): 
    id = models.IntegerField(primary_key=True) 
    name = models.TextField() 

    class Meta: 
     managed = False 

et je veux également sélectionner comm. À mon avis, j'utilise le code suivant pour obtenir des données de Models:

condition = Q(name__icontains=names[0]) 
for name in names[1:]: 
    condition &= Q(name__icontains=name) 
# ↓↓↓ this line is for what I need but it doesn't work 
condition &= Q(ModelInteractions__id2=id) 

models = Models.objects.filter(condition) 

id est reçu sur demande (def details(request, id):).

Je dois sélectionner comm de ModelInteractionsid2 = id (ID reçu sur demande).

retourne code actuel:

Cannot resolve keyword 'ModelInteractions' into field. Choices are: id, name 
+1

vous ne pouvez pas le faire comme ça dans django, vous devez avoir des relations avec foreignkey, vous pouvez l'utiliser ou utiliser autre requête brute si vous ne voulez pas parler de relations – Exprator

+0

Pouvez-vous, s'il vous plaît , montrez un exemple pour mon cas? – feci

Répondre

1
class ModelInteractions(models.Model): 
    id1 = models.IntegerField(primary_key=True) 
    id2 = models.IntegerField() 
    comm = models.TextField(blank=True, null=True) 

    class Meta: 
     managed = False 
     unique_together = (('id1', 'id2'),) 


class Models(models.Model): 
    id = models.IntegerField(primary_key=True) 
    name = models.TextField() 
    interaction= models.ForeignKey(ModelInteractions,on_delete=models.CASCADE) 

font vos modèles comme celui-ci, puis makemigrations et migrent

exécuter ensuite la même requête jusqu'à ici

condition = Q(name__icontains=names[0]) 
for name in names[1:]: 
    condition &= Q(name__icontains=name) 

changer ensuite cette ligne

condition &= Q(interaction__id2=id) 

puis

models = Models.objects.filter(condition) 
+0

Merci! Devrais-je fournir une valeur par défaut? Je reçois cette 'django.db.utils.IntegrityError: colonne" interaction_id "contient des valeurs nulles lors de la migration. – feci

+0

vous pouvez, comme pour les anciennes données dans la table, vous avez une valeur vide, vous pouvez déposer la base de données et en créer une nouvelle et migrer, si vous n'avez pas besoin des anciennes données, ou bien donner default = 1 – Exprator