He instalado MongoDB en mi proyecto Django. Como es la primera vez que uso Mongo, decidí probar cómo funciona y creé un programa simple para almacenar datos (precio y cantidad en mi caso). El proyecto se llama "intercambio" y tiene 2 carpetas: intercambio y aplicación.
Este es el archivo models.py de la carpeta 'app':
from django.db import models from djongo.models.fields import ObjectIdField, Field from django.contrib.auth.models import User class Profile(models.Model): _id = ObjectIdField() user = models.ForeignKey(User, on_delete=models.CASCADE) class Order(models.Model): _id = ObjectIdField() profile = models.ForeignKey(Profile, on_delete=models.CASCADE) datetime = models.DateTimeField(auto_now_add=True) price = models.FloatField() quantity = models.FloatField() #ips = models.Field(default=[]) #subprofiles = models.Field(default={})Este es el archivo admin.py
from django.contrib import admin from .models import * admin.site.register(Profile) admin.site.register(Order)Así configuro la base de datos en el archivo settings.py de la carpeta de intercambio
DATABASES = { 'default': { 'ENGINE': 'djongo', 'NAME': 'engine', } }Entonces, después de hacer las migraciones y crear el superusuario, ejecuté el servidor, entré en la sección Admin que en Perfil, y creé un perfil eligiendo la única opción disponible (mi superusuario). En este punto creé un pedido en la sección Pedidos: así que elegí en el campo "perfil" la única opción disponible (el perfil creado antes), luego llené los otros 2 campos (precio y cantidad), pero cuando intento guardarlo, aparece encima del campo "perfil" el siguiente error:
"Seleccione una opción válida. Esa opción no es una de las opciones disponibles".
No puedo entender dónde me equivoco.
¡Gracias de antemano por tu ayuda!
El problema es que ForeignKey agrega por defecto _id al nombre de la propiedad. En su ejemplo anterior, está tratando de usar la propiedad user_id en Profile y profile_id en Order.
La solución es actualizar ForeignKey a:
profile = models.ForeignKey(Profile, db_column='profile', on_delete=models.CASCADE) Lo que cambie db_column a puede depender de cómo haya configurado su esquema dentro de mongodb, pero recibí este mismo error y db_column a la propiedad correcta, lo arreglé para mí.
OMG @Adam Berg, he estado tratando de resolver este problema durante más de las últimas 4 horas. Su respuesta lo resolvió en minutos. Muchas gracias, su trabajo es muy apreciable.
import datetime,os from djongo import models class test1(models.Model): name = models.CharField(max_length=100) class Profile(models.Model): user = models.ForeignKey(test1, db_column='user',on_delete=models.CASCADE)Esto lo ayudará a realizar todas las consultas relacionadas con la clave externa.