Tôi đang cố gắng tạo cơ sở dữ liệu django ghi lại tất cả các giao dịch mua truyện tranh của mình và tôi đã gặp phải một số sự cố. Tôi đang cố gắng mô hình hóa mối quan hệ giữa vấn đề truyện tranh và các nghệ sĩ làm việc trên đó.Nhiều mối quan hệ với dữ liệu bổ sung về mối quan hệ
Vấn đề về truyện tranh có một hoặc nhiều nghệ sĩ đang khắc phục sự cố và nghệ sĩ sẽ làm việc trên nhiều vấn đề. Ngoài ra, các nghệ sĩ có một vai trò liên quan đến những gì họ đã làm trên tác giả truyện tranh (tất cả công việc về vấn đề đó), nhà văn (viết kịch bản), ngăn kéo (vẽ truyện tranh hoàn chỉnh), bút chì, mực, màu sắc hoặc văn bản, và có thể có một số nghệ sĩ trong một vai trò nhất định.
này mang lại cho tôi một mô hình cơ sở dữ liệu như:
sau đó tôi dịch này vào mô hình Django sau. Như tôi đã yêu cầu dữ liệu bổ sung về mối quan hệ, tôi tin rằng tôi phải sử dụng một lớp riêng biệt để xử lý các mối quan hệ, và giữ thêm
class Artist(models.Model):
name = models.CharField(max_length = 100)
def __unicode__(self):
return self.name
class ComicIssue(models.Model):
issue_number = models.IntegerField()
title = models.TextField()
artists = models.ManyToManyField(Artist, through='IssueArtist')
def __unicode__(self):
return u'issue = %s, %s' % (self.issue_number, self.title)
class IssueArtist(models.Model):
roles = ((0, "--------"),
(1, "Creator"),
(2, "Writer"),
(3, "Drawer"),
(4, "Pencils"),
(5, "Inks"),
(6, "Colours"),
(7, "Text"),
)
artist = models.ForeignKey(Artist)
issue = models.ForeignKey(ComicIssue)
role = models.IntegerField(choices = roles)
Câu hỏi của tôi là:
1) Điều này có vẻ đúng cách mô hình hóa điều này?
2) Nếu tôi không sử dụng tính năng through='IssueArtist'
, tôi có thể thêm mối quan hệ bằng cách sử dụng chức năng artists.add()
. Nếu tôi sử dụng điều này, tôi gặp lỗi 'ManyRelatedManager' object has no attribute 'add'
. Tôi có phải tự quản lý mối quan hệ bằng cách tạo ra IssueArtist()
trường hợp và tìm kiếm một cách rõ ràng bảng quan hệ không? NB. Tôi đang sử dụng Django 1.0, tại thời điểm này
Liên kết đó chính xác là những gì tôi đang tìm kiếm và không tìm thấy. Tôi nghĩ tôi cần phải xem xét kỹ năng tìm kiếm của mình. –
Đây là một phần 'biển thật' của Django. Thông báo lỗi là gây hiểu lầm và các phương pháp thêm/tạo thực sự sẽ hoạt động như mong đợi. Cảm ơn bạn đã đăng câu trả lời này. – Rich
chỉ ra rằng a.save() là không cần thiết nếu bạn đang sử dụng phương thức create(). https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.create –