Làm cách nào để định cấu hình Tastypie để xử lý trường là duy nhất? Kỳ vọng của tôi là nhận được một số loại lỗi không phải 500 (có thể là xung đột 409?) Làm phản hồi nếu tôi cố gắng chèn các mục trùng lặp cho trường được đánh dấu là duy nhất.Làm cách nào để định cấu hình Tastypie để xử lý trường là duy nhất?
Tôi đã xem qua các tài liệu và có vẻ như nó phải rõ ràng với tôi, nhưng vì lý do nào đó, tôi không nhận được phản hồi tôi mong đợi.
Đây là liên kết tài liệu:
http://readthedocs.org/docs/django-tastypie/en/latest/fields.html?highlight=unique
Mẫu mã được như sau:
urls.py
v1_api = Api(api_name='v1')
v1_api.register(CompanyResource())
urlpatterns = patterns('',
(r'^api/', include(v1_api.urls)),
)
resource.py
class CompanyResource(ModelResource):
CompanyName = fields.CharField(attribute='company_name')
CompanyId = fields.CharField(attribute='company_id', unique=True)
Contact = fields.CharField(attribute='contact')
Email = fields.CharField(attribute='email')
Phone = fields.CharField(attribute='phone')
class Meta:
queryset = Company.objects.all()
authentication = BasicAuthentication()
authorization = Authorization()
allowed_methods = ['get', 'post']
models.py
class Company(models.Model):
company_name = models.TextField(default=None, blank=True, null=True)
company_id = models.CharField(default='', unique=True, db_index=True, max_length=20)
contact = models.TextField(default=None, blank=True, null=True)
email = models.EmailField(default=None, blank=True, null=True)
phone = models.TextField(default=None, blank=True, null=True)
Các lỗi tôi nhận được như sau (sử dụng curl để đạt dịch vụ địa phương của tôi):
curl --dump-header - -H "Content-Type: application/json" -X POST --user user:password --data '{"CompanyName": "company", "CompanyId": "1234567890", "Contact": "John", "Email": "[email protected]", "Phone": "555-555-5555"}' http://localhost:8000/api/v1/company/
HTTP/1.0 500 INTERNAL SERVER ERROR
Date: Thu, 15 Sep 2011 18:25:20 GMT
Server: WSGIServer/0.1 Python/2.7.1
Content-Type: application/json; charset=utf-8
{"error_message": "(1062, \"Duplicate entry '1234567890' for key 'api_company_company_id_uniq'\")",
...<snip>...
raise errorclass, errorvalue\n\nIntegrityError: (1062, \"Duplicate entry '1234567890' for key 'api_company_company_id_uniq'\")\n"}
Khi tôi loại bỏ unique=True, db_index=True,
từ mô hình Công ty , Tôi không nhận được lỗi Integrity, nhưng thay vào đó, một tài nguyên mới trùng lặp được tạo ra. Một lần nữa, đây không phải là kết quả mong đợi như tôi mong đợi duy nhất để tạo ra một số xác nhận hợp lệ và gây ra một số phản hồi không phải 500.
Tôi đang đối mặt với cùng một điều với các trường mô hình được định nghĩa là trống = True. Tastypie đang tạo bản ghi với các mục nhập trống. – Erik
Câu trả lời cho tôi là sử dụng xác nhận = FormValidation (form_class =). Điều này xác nhận các trường của mô hình của bạn. –
Erik