django - 如何让非pk值成为在django rest框架中发出post请求的值
问题描述
正如问题所述,我希望能够在 post 请求中传递一个不同的值,比如用户名“bob”而不是 1,而不是必须在我的 JSON 请求中传递 PK。所以想法是而不是我的请求包含:
{
"client": 1,
"urgent": true,
"article": 1,
"quantity": 1,
"order_to": 1
}
它应该包含:
{
"client": "bob",
"urgent": true,
"article": 234,
"quantity": 1,
"order_to": 1
}
这是我的相关模型:
class UserModel(models.Model):
MEMBERSHIP_TYPE = [
('NM', 'NORMAL'),
('PT', 'PLATA'),
('OR', 'ORO'),
('PL', 'PLATINO'),
]
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=100, unique=True)
photo = models.ImageField(upload_to='images/', blank=True)
address = models.TextField()
client_type = models.CharField(max_length=2,
choices=MEMBERSHIP_TYPE,
default= 'NM')
def __unicode__(self):
return self.name
class ArticleModel(models.Model):
id = models.AutoField(primary_key=True)
code = models.IntegerField(unique=True)
description = models.TextField()
def __str__(self):
return str(self.code)
class SupplierModel(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
address = models.TextField()
articles = models.ManyToManyField(ArticleModel)
def __str__(self):
return self.name
class OrderModel(models.Model):
id = models.AutoField(primary_key=True)
client = models.ForeignKey('UserModel', on_delete=models.CASCADE)
gen_time = models.DateTimeField(auto_now_add=True)
gen_supplied = models.DateTimeField(null=True, blank=True)
urgent = models.BooleanField()
order_to = models.ForeignKey('OrderToModel', on_delete=models.CASCADE)
article = models.ForeignKey('ArticleModel', on_delete=models.CASCADE)
quantity= models.IntegerField()
和序列化器:
class OrderCreateSerializer(serializers.ModelSerializer):
# order_to = OrderToPolymorphicSerializer()
class Meta:
model = OrderModel
fields = ('client', 'urgent', 'article', 'quantity', 'order_to')
非常感谢您的帮助。先感谢您。
解决方案
你可以这样做
class OrderCreateSerializer(serializers.ModelSerializer):
client = serializers.SlugRelatedField(
slug_field='username',
queryset=UserModel.objects.all()
)
article = serializers.SlugRelatedField(
slug_field='code',
queryset=ArticleModel.objects.all()
)
class Meta:
model = OrderModel
fields = ('client', 'urgent', 'article', 'quantity', 'order_to')
推荐阅读
- javascript - 如何将相机附加到模型上的骨骼/顶点而不影响其旋转?(一个框架)
- python - 在 pandas 中,如何打开一个 txt 文件,其中每一行的格式都像一个 json 对象?
- javascript - 无法使用 onclick 函数从数据表中获取另一列数据?
- javascript - 可以在 TypeScript 中的元组上使用 Array.prototype.map(),同时在返回类型中保留元组长度吗?
- javascript - 在不刷新 django 的情况下更改 URL 和内容
- python - 如何在 tkinter 中创建时将光标移动到新创建的文本框中?
- python - 如何在 python tkinter 中嵌入 html 编码
- excel - 如何在不使用 .SentOnBehalfOf 或 .SendUsingAccount 的情况下通过 Excel VBA 在 Outlook 的“发件人:”下拉字段中选择电子邮件帐户?
- html - 为什么我用于 HTML 输入的 Size 属性不影响其宽度?
- mockito - mockito & powermock & powermockito 之间有什么联系和区别?