Django: Обработка дублированных значений в уникальных строках
У меня есть строка данных, и в ней находится объект Protein. Белковый объект имеет уникальный protein_id (не PK) и ряды данных могут иметь повторяющиеся белковые объекты.
Так, когда пользователь создает строку данных, скажем Data: {'protein_id':ABC123}, если данный protein_id уже существует в базе данных, мы будем использовать этот объект белка.
Я могу создать объект белка, когда он не существует в базе данных. Но когда он уже существует, я получаю "белок с таким идентификатором белка уже существует.".
Я понимаю, что это происходит потому, что я создаю новый объект белка с тем же самым protein_id и protein_id имеет атрибут unique=True. Но я не понимаю, почему я не могу получить объект, если он существует, или почему возникает исключение (не уверен в логике).
Models.py
class Protein(models.Model):
protein_id = models.CharField(max_length=256, null=False, blank=False,unique=True)
sequence = models.CharField(max_length=40000,blank=True)
Serializer.py
class ProteinSerializer(serializers.ModelSerializer):
class Meta:
model = Protein
fields = ['protein_id',"sequence"]
def create(self,validated_data):
protein_data = validated_data.pop('protein')
protein = None
try:
protein = Protein.objects.get(protein_id=protein_data['protein_id'])
except Protein.DoesNotExist:
protein = Protein.objects.create(**protein_data)
return protein
Здесь я попробовал метод try-except, в котором сериализатор сначала получит объект белка в базе данных и, если он не может быть найден, выбросит исключение, которое затем создаст объект белка. Я также попробовал get_or_create() и думаю, что логика одинаковая для этих двух методов.
Так что я не уверен, почему я все еще создаю объект (выбрасывая исключение), когда он может быть найден. Или у меня неправильный подход? Заранее спасибо!