मैं एक ऐसी वेबसाइट तैयार करने की प्रक्रिया में हूं जो खेल प्रशिक्षकों को टीम बनाने और फिर उस टीम में खिलाड़ियों को जोड़ने की अनुमति देगी। लक्ष्य कोचों को अपनी टीम में खिलाड़ियों को जोड़ने की अनुमति देना है और मैच डेटा दर्ज करके उन्हें आंकड़े जोड़ना है।

मैं जिस मुद्दे पर चल रहा हूं, वह खिलाड़ियों के लिए अपना खाता बनाने और अपने खाते को कोच द्वारा बनाए गए खिलाड़ियों में से एक से जोड़ने की क्षमता है। कोच एक खिलाड़ी के खाते की विशिष्ट आईडी दर्ज करने और टीम में बनाए गए खिलाड़ी का चयन करने में सक्षम होगा, और खिलाड़ी को 'नकली' उपयोगकर्ता के लिए दर्ज किए गए आंकड़ों तक पहुंच प्रदान करेगा। इस बिंदु पर नकली उपयोगकर्ता को हटा दिया जाएगा। इससे निपटने के लिए मेरा प्रारंभिक डिजाइन इस प्रकार है:

मैं डिफ़ॉल्ट 'उपयोगकर्ता' तालिका का उपयोग करूंगा, और इसे OneToOneField के माध्यम से 'प्रोफ़ाइल' तालिका से लिंक करूंगा। जब भी कोई कोच अपनी टीम के लिए खिलाड़ी बनाता है, एक उपयोगकर्ता बनाया जाएगा और एक संबद्ध प्रोफ़ाइल बनाई जाएगी। नकली उपयोगकर्ता के पास प्रोफ़ाइल तालिका में एक आईडी के रूप में UUIDField होगा। मैं खिलाड़ियों के लिए आँकड़े इस प्रकार संग्रहीत कर रहा हूँ:

class Stats(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    match = models.ForeignKey(Match, on_delete=models.CASCADE)
    player = models.ForeignKey(User, on_delete=models.CASCADE)
    ...
    ... several stats as IntegerFields

आंकड़े तालिका नकली उपयोगकर्ता को तर्क के रूप में लेगी, और उस उपयोगकर्ता से आंकड़े संबंधित करेगी। जब एक वास्तविक उपयोगकर्ता एक खाता बनाता है और कोच अपना यूयूआईडी दर्ज करता है और नकली उपयोगकर्ता का चयन करता है, तो आंकड़ों में 'खिलाड़ी' फ़ील्ड को वास्तविक उपयोगकर्ता द्वारा बदल दिया जाएगा, और नकली उपयोगकर्ता को हटा दिया जाएगा।

मेरा सवाल यह है कि क्या इस मुद्दे से संपर्क करने का यह सबसे अच्छा तरीका है? उपयोगकर्ता तालिका को बिना उपयोगकर्ता नाम या पासवर्ड वाले उपयोगकर्ताओं के साथ प्रदूषित करना अच्छा नहीं लगता (क्या इसकी अनुमति भी है?), हालांकि अगर नकली उपयोगकर्ताओं के लिए एक अलग तालिका बनाई गई थी, तो मेरा मानना ​​​​है कि खिलाड़ी क्षेत्र के साथ समस्याएँ होंगी।

player = models.ForeignKey(User, on_delete=models.CASCADE)

खिलाड़ी फ़ील्ड आँकड़े तालिका को उपयोगकर्ता तालिका से जोड़ता है, और उपयोगकर्ता ऑब्जेक्ट की अपेक्षा करता है। यदि यह इसके बजाय एक नकली उपयोगकर्ता प्रविष्टि से संबंधित है, तो मैं इसे वास्तविक खिलाड़ी को असाइन नहीं कर पाऊंगा, क्योंकि यह नकली उपयोगकर्ता वस्तु नहीं है।

मुझे यकीन है कि इस मुद्दे का एक नाम है जिसके बारे में मुझे जानकारी नहीं है क्योंकि यह Django में एक आम समस्या होनी चाहिए।

0
MikeMDC 25 नवम्बर 2020, 02:12

1 उत्तर

सबसे बढ़िया उत्तर

मैं इस मामले में एक अस्थायी तालिका (मॉडल) का बिल्कुल भी उपयोग नहीं करता। इसके बजाय, मेरा सुझाव है कि आप एक Player मॉडल बनाएं जिसमें UUID फ़ील्ड और OneToOneField से User(null=True) हो। Stats.player को Player मॉडल की ओर इशारा करना चाहिए। फिर जब कोई खिलाड़ी साइट के साथ पंजीकरण करता है, तो बस request.user को player.user को असाइन करें।

चूंकि आपके पास 2 प्रकार के उपयोगकर्ता, खिलाड़ी और कोच हैं, इसलिए खिलाड़ियों के लिए एक अलग "प्रोफ़ाइल" होना समझ में आता है। वह खिलाड़ी "प्रोफ़ाइल" Player मॉडल है।

0
Ryan Nowakowski 25 नवम्बर 2020, 21:30