1

When i'm trying to use update or create query it's gives error FieldError: Invalid field name(s) for model

Here it is my models.py

class Base(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    created_by = models.ForeignKey(User)
    class Meta:
        abstract = True

class Graph(Base):
    sensor = models.ForeignKey("Sensor")
    name = models.CharField(max_length=50)
    query = models.TextField()
    javascript = models.TextField()
    args = models.TextField()
    server_details = models.ForeignKey("ServerDetails")

Now I want to update or create query of Graph

Here it is I'm trying to do

@is_login_valid
def save_graph(request):
    params = json.loads(request.body)
    ser_obj = ServerDetails.objects.get(id=params['server_details']['id'])
    sensor = Sensor.objects.get(id=1)
    rrs_obj, created = Graph.objects.update_or_create(
        id=params.get('id'),
        defaults={
            "name": params.get('name'),
            "query": params.get('query'),
            "javascript": params.get('javascript'),
            "args": params.get('args'),
            "server_details": ser_obj,
            "created_by": request.user,
            "sensor": sensor
        }
    )
    return JsonResponse({
        "validation": "Graph saved successfully",
        "status": True
    })

When I'm trying to update_or_create its gives following error

Traceback (most recent call last): File "/home/nikhil/general-env/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner response = get_response(request)

File "/home/nikhil/general-env/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request)

File "/home/nikhil/general-env/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/nikhil/Projects/myProject/myProject/utils/decorators.py", line 46, in wrap return function(request, *args, **kwargs)

File "/home/nikhil/Projects/myProject/myProject/SensorMonitor/views.py", line 127, in save_graph "sensor": sensor

File "/home/nikhil/general-env/local/lib/python2.7/site-packages/django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/home/nikhil/general-env/local/lib/python2.7/site-packages/django/db/models/query.py", line 476, in update_or_create lookup, params = self._extract_model_params(defaults, **kwargs)

File "/home/nikhil/general-env/local/lib/python2.7/site-packages/django/db/models/query.py", line 534, in _extract_model_params "', '".join(sorted(invalid_params)),

FieldError: Invalid field name(s) for model Graph: 'created_by', 'query', 'sensor', 'server_details'.

NIKHIL RANE
  • 4,012
  • 2
  • 22
  • 45
  • Your example looks ok to me. Please show the actual code and the full traceback. What is `Base`? – Alasdair Nov 05 '17 at 15:47
  • @Alasdair See my updated question – NIKHIL RANE Nov 05 '17 at 15:57
  • Your code in your question doesn't seem to match `"created_by": request.user` from the traceback. – Alasdair Nov 05 '17 at 17:31
  • It's generally better to wrap your traceback in a code block than in a quote block; then the newlines are preserved and the traceback is more readable. –  Nov 06 '17 at 06:54
  • As per Alasdair's comments: 1/ your traceback has `MyModel`, but your code shows `Mymodel`; 2/ `Mymodel` does have `name` and `query` fields (but not `created_by`), yet the traceback claims there are three fields invalid. –  Nov 06 '17 at 06:58
  • Alternatively: you actually have both a model `MyModel` and a model `Mymodel`, and are confusing the two (not surprising, given the choice of names). –  Nov 06 '17 at 07:03
  • @Evert See my updated question – NIKHIL RANE Nov 06 '17 at 08:11
  • It strongly suggests that you have multiple `Graph` models, and they are mixed up. You could start with adding some debug print functions, e.g. `print([f.name for f in MyModel._meta.get_fields()])` and `print(Graph.__file__)` in the `save_graph` view (I assume you're using the development server), to see what the `Graph` model actually contains. –  Nov 06 '17 at 08:39

0 Answers0