'dict' object has no attribute 'pk' when using django bulk_create() function

  • Last Update :
  • Techknowledgy :

You obtain the value in a dictionary for the corresponding key by subscripting, like:

objs = [CounterFileData(date = row['date'], value = row['value']) for row in parsed_data]

Furthermore you passed parsed_data to the list(..) constructor, whereas it should be objs. By using list comprehension however, we can omit that.

batch = [CounterFileData(date = row['date'], value = row['value']) for row in parsed_data]
CounterFileData.objects.bulk_create(batch)

Suggestion : 2

If the object’s primary key attribute defines a default then Django executes an UPDATE if it is an existing model instance and primary key is set to a value that exists in the database. Otherwise, Django executes an INSERT.,If the object’s primary key attribute is not set or if the UPDATE didn’t update anything (e.g. if primary key is set to a value that doesn’t exist in the database), Django executes an INSERT.,If the object’s primary key attribute is set to a value that evaluates to True (i.e., a value other than None or the empty string), Django executes an UPDATE.,If a model has an AutoField — an auto-incrementing primary key — then that auto-incremented value will be calculated and saved as an attribute on your object the first time you call save():

from django.db
import models

class Book(models.Model):
   title = models.CharField(max_length = 100)

@classmethod
def create(cls, title):
   book = cls(title = title)
# do something with the book
return book

book = Book.create("Pride and Prejudice")
class BookManager(models.Manager):
   def create_book(self, title):
   book = self.create(title = title)
# do something with the book
return book

class Book(models.Model):
   title = models.CharField(max_length = 100)

objects = BookManager()

book = Book.objects.create_book("Pride and Prejudice")
from django.db.models
import DEFERRED

@classmethod
def from_db(cls, db, field_names, values):
   # Default implementation of from_db()(subject to change and could # be replaced with super()).
if len(values) != len(cls._meta.concrete_fields):
   values = list(values)
values.reverse()
values = [
   values.pop() if f.attname in field_names
   else DEFERRED
   for f in cls._meta.concrete_fields
]
instance = cls( * values)
instance._state.adding = False
instance._state.db = db
# customization to store the original field values on the instance
instance._loaded_values = dict(
   zip(field_names, (value
      for value in values
      if value is not DEFERRED))
)
return instance

def save(self, * args, ** kwargs):
   # Check how the current values differ from._loaded_values.For example,
   # prevent changing the creator_id of the model.(This example doesn 't
      # support cases where 'creator_id'
      is deferred).
if not self._state.adding and(
      self.creator_id != self._loaded_values['creator_id']):
   raise ValueError("Updating the value of creator isn't allowed")
super().save( * args, ** kwargs)
>>> obj = MyModel.objects.first() >>>
   del obj.field >>>
   obj.field # Loads the field from the database
def test_update_result(self):
   obj = MyModel.objects.create(val = 1)
MyModel.objects.filter(pk = obj.pk).update(val = F('val') + 1)
# At this point obj.val is still 1, but the value in the database
# was updated to 2. The object 's updated value needs to be reloaded
# from the database.
obj.refresh_from_db()
self.assertEqual(obj.val, 2)
class ExampleModel(models.Model):
   def refresh_from_db(self, using = None, fields = None, ** kwargs):
   # fields contains the name of the deferred field to be
# loaded.
if fields is not None:
   fields = set(fields)
deferred_fields = self.get_deferred_fields()
# If any deferred field is going to be loaded
if fields.intersection(deferred_fields):
   # then load all of them
fields = fields.union(deferred_fields)
super().refresh_from_db(using, fields, ** kwargs)

Suggestion : 3

jQuery Tutorial ,QuerySet, Object has no attribute id - Django,Django Rest Framework 'RelatedManager' object has no attribute

Try this:

im = Image.open(os.path.join(generate_filename()))