एम 2 एम रिश्ते या 2 एफके?

निम्नलिखित में से कौन सी संरचना बेहतर होगी:

# M2M
class UserProfile(models.Model):
    ...
    groups = models.ManyToManyField(Group)

class Group(models.Model):
    ...

या -

# 2 FKs
class UserProfile(models.Model):
    ...

class Group(models.Models):
    ...

class GroupMember(models.Model):
    user = models.ForeignKey(UserProfile)
    group = models.ForeignKey(Group)

कौन सा बेहतर होगा?

0
जोड़ा संपादित
विचारों: 1

2 उत्तर

दोनों अनिवार्य रूप से वही हैं। जब आप एम 2 एम Django स्वचालित रूप से एक मध्यस्थ मॉडल बनाता है, जो आपके GroupMember मॉडल की तरह बिल्कुल है। हालांकि, यह कुछ एपीआई हुक भी सेट करता है जो आपको Group मॉडल से सीधे UserProfile मॉडल से एक्सेस करने की इजाजत देता है, बिना मध्यस्थ मॉडल के साथ गड़बड़ किए।

आप through का उपयोग करके वापस उसी हुक को वापस जोड़ सकते हैं जैसे @ San4ez बताते हैं, लेकिन आपने केवल चीजों को और जटिल बना दिया है। कस्टम through मॉडल बनाना केवल फायदेमंद है यदि आपको रिश्ते में अतिरिक्त फ़ील्ड जोड़ने की आवश्यकता है। अन्यथा, डिफ़ॉल्ट के साथ छड़ी।

लंबा और छोटा, # 1 बेहतर है, केवल इसलिए कि यह बिल्कुल # 2 जैसा ही है, लेकिन सरल और बिना किसी बाहरी कोड के।

1
जोड़ा

आप का उपयोग करके इन 2 प्रकारों को भी जोड़ सकते हैं। के माध्यम से विकल्प

groups = models.ManyToManyField(Group, through='GroupMember')

बेहतर से आपका क्या मतलब है? आम तौर पर आपको इंटरमीडिएट मॉडल बनाने की आवश्यकता नहीं होती है (उस मामले को छोड़कर जब आपको अतिरिक्त डेटा )।

ManyToManyField does his job perfectly, so don't write its functionality by yourself.

1
जोड़ा