【发布时间】:2016-04-10 11:48:33
【问题描述】:
我正在使用 Django Rest 框架。我正在使用此建议在自动建议 Select2 dropdown but allow new values by user? 中添加新值。但这对我来说几乎是不可能的。
Payee 是外键字段。如果返回字符串和 '(NEW)' 而不是主键,我需要在 Contacts 模型中创建对象,并且应该将新创建的对象的主键设置为收款人字段。
models.py
class Contacts(models.Model):
no = models.AutoField(primary_key=True)
name = models.CharField(max_length=25)
class Transactions(models.Model):
payee = models.ForeignKey(Contacts,null=True, related_name = 'transactions_payee')
reminder = models.ForeignKey(Reminders, related_name='transaction_reminders',blank=True, null=True)
序列化器.py
class TransactionSerializer(serializers.ModelSerializer):
reminder = ReminderSerializer()
class Meta:
model = Transactions
fields=('pk','payee','reminder'...)
def validate_payee(self, value):
if " (NEW)" not in value:
return value
else:
payee = value.replace(" (NEW)", "")
contact = Contacts.objects.create(name = payee)
value = contact.no
return value
def create(self, validated_data):
... #writable nested serializer for reminder field.
def update(self, instance, validated_data):
... #writable nested serializer for reminder field.
validate_payee 甚至没有被调用。我什至尝试在 create() 中添加相同的逻辑,但是 django 的默认验证器在所有这些之前出现并抛出错误消息说
{payee: ["Incorrect type. Expected pk value, received unicode."]}
我是 Django 的初学者。我搜索了几乎所有的 stackoverflow 问题。没有什么对我有用,或者我在某个地方犯了错误。
【问题讨论】:
标签: python django django-rest-framework