В Django я использую filter
, чтобы вернуть Queryset, чтобы я мог обновить его в моем сериализаторе. Проблема в том, что я получаю эту ошибку: 'QuerySet' object has no attribute 'vin'
. Я понимаю, что ошибка возникает при попытке поиска поля в Queryset, и в этом случае вы бы использовали get()
вместо filter()
, но я не делаю поиск поля. И моя база данных обновляется , как и предполагалось, но я получаю ошибку независимо. документы используют его так же:
# Update all the headlines with pub_date in 2007.
Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same')
. Но я не уверен, почему он действует так, как будто я все еще пытаюсь выполнить поиск поля в наборе запросов
serializers.py
class ShoppingListSerializer(serializers.ModelSerializer):
class Meta:
model = ShoppingList
fields = ('vin', 'img_url', 'year', 'make', 'model', 'grade',
'colour', 'MMR', 'run_date', 'timestamp', 'lane', "trim",
"mileage", 'human_valuation', 'run_no', 'adesa_id', 'engine',
'transmission', 'wheel_drive', 'interior_color', 'seller_announcements',
'auction_location', 'extra', 'check')
def create(self, validated_data):
# look up the supplied vin, rundate and check fields before POSTing
# if the instance exists then just update
vin = validated_data["vin"]
run_date = validated_data["run_date"]
check = validated_data["check"]
lookup = ShoppingList.objects.filter(vin=vin, run_date=run_date, check=check)
# if lookup exists then update that instance instead
if lookup:
print("Updating old record")
lookup.update(**validated_data)
print(lookup)
return lookup
return ShoppingList.objects.create(**validated_data)
models.py
class ShoppingList(models.Model):
vin = models.CharField(max_length=20)
img_url = models.URLField(blank=True)
year = models.CharField(max_length=20, default="Check Online")
make = models.CharField(max_length=20, default="Check Online")
model = models.CharField(max_length=20, default="Check Online")
grade = models.CharField(max_length=20, default="Check Online")
colour = models.CharField(max_length=20, default="Check Online")
MMR = models.TextField(default="n/a")
check = models.TextField(default="n/a")
run_date = models.CharField(max_length=20, default="Check Online")
timestamp = models.DateTimeField(auto_now=True) # updated timestamp
lane = models.CharField(max_length=10, default="Check Online")
trim = models.CharField(max_length=60, default="Check Online")
mileage = models.CharField(max_length=20, default="Check Online")
human_valuation = models.TextField(default="0")
run_no = models.CharField(max_length=20, default="Check Online")
adesa_id = models.CharField(max_length=20, default="n/a")
engine = models.TextField(default="n/a")
transmission = models.TextField(default="n/a")
wheel_drive = models.CharField(max_length=50, default="n/a")
interior_color = models.CharField(max_length=50, default="n/a")
seller_announcements = models.TextField(default="n/a")
auction_location = models.CharField(max_length=50, default="n/a")
extra = models.TextField(default="n/a")