2012-10-06 27 views
8

Tôi muốn chèn một số dữ liệu vào trường nhiều đến nhiều. Tôi nhận được lỗi nàyDjango: đối số từ khóa không hợp lệ cho hàm này

sử dụng là một cuộc tranh cãi từ khóa không hợp lệ cho chức năng này

tôi cũng đã thử nó với relatedName ... nhưng vẫn không hoạt động ...

My mô hình trông như thế này:

models.py

class Workspace(models.Model): 
    user = models.ManyToManyField(User,null=False, blank=False, related_name='members') 
    workspace_name = models.CharField(max_length=80, null=False, blank=False) 
    workspace_cat =models.CharField(max_length=80, null=True, blank=True) 

v iews.py

db= Workspace(user=5, workspace_name=data_to_db['workspace_name'],workspace_cat=data_to_db['workspace_category']) 
db.save() 

Có ai có ý tưởng không? Cảm ơn rất nhiều!

Trả lời

20

Bạn sử dụng một lĩnh vực ManyToMany cho user lĩnh vực đối tượng Workspace của bạn, bạn không thể cung cấp cho nó một người sử dụng, đó không phải là làm thế nào một ManyToMany công trình, đó sẽ là một ForeignKey.

Về cơ bản, sử dụng một ForeignKey, mỗi không gian làm việc có một User liên quan đến nó, có một liên kết trực tiếp Workspace -> User, vì vậy nó làm cho tinh thần để tạo ra một Workspace và vượt qua nó một User, như bạn sẽ được điền vào một CharField.

Quan hệ ManyToMany có nghĩa là một số người dùng có thể được liên kết với một số Workspace và một số Workspaces đến một User. Khi sử dụng một số ManyToMany, bạn sẽ tạo Workspacerồi thêm một số User của nó.

Để thêm vào một mối quan hệ ManyToMany, làm như sau:

my_user = User.objects.get(pk = 5) 
my_workspace = Workspace(workspace_name=data_to_db['workspace_name'],workspace_cat=data_to_db['workspace_category']) 
my_workspace.save() # committing to the DB first is necessary for M2M (Jurudocs edit) 
my_workspace.users.add(my_user) 

Bạn nên đổi tên lĩnh vực user-users để làm cho tên mối quan hệ rõ ràng hơn.

+0

cảm ơn câu trả lời của bạn ... im trường hợp của tôi tôi thực sự muốn có nhiều người dùng được liên kết với không gian làm việc và một số không gian làm việc cho một người dùng ;-P – Jurudocs

+0

@Jurudocs Sau đó, một 'ManyToMany' là sử dụng thích hợp, vui lòng xem câu trả lời đã chỉnh sửa về cách sử dụng nó! –

Các vấn đề liên quan