Значение по умолчанию, если null или если значение не существует в таблице Django
У меня есть модель продукта, как показано ниже:
class Brand(models.Model):
name = models.CharField(primary_key=True, max_length=100)
def __str__(self):
return self.name
class Product(models.Model):
...
brand = models.ForeignKey(Brand, on_delete=models.PROTECT, default='Mercedes')
...
When I am posting a product without the brand field it works and sets the product with brand default value, but when I add a brand field like this brand: "",
or send a value which doesn't exist inside Brand table like this: brand: "abc123",
it shows me informations: This field may not be null.
and Invalid pk \"abc123\" - object does not exist.
. I still want to set the default value in this situations, so if the value is null or does not exist I want to use the default='Mercedes'
. How can I do this?
Для задачи 1). Установите null=True
на поле brand
в модели Product
. Это позволит использовать нулевые значения для этого поля в базе данных.
Для проблемы 2). Предполагая, что вы хотите создать экземпляр бренда, если он не существует, вы можете использовать Model.objects.get_or_create()
.
obj, created = Brand.objects.get_or_create(
other_field='Foo', # optional if other fields have defaults
another_field='Bar', # optional if other fields have defaults
defaults={'name': 'Toyota'}, # the fallback value if object doesn't exist
)
obj
- это полученный или вновь созданный объект, а created
скажет вам, существовал ли obj или нет.
Затем используйте obj
для brand
при создании Product
.
Если вы не хотите создавать объект, вы можете просто использовать get()
в операторе try
except
:
from django.core.exceptions import ObjectDoesNotExist
try:
brand = Brand.objects.get(name="Toyota")
product = Product.objects.create(brand=brand)
except ObjectDoesNotExist:
# handle exception